home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 June: Reference Library / Dev.CD Jun 96 RL / Dev.CD Jun 96 RL.toast / Technical Documentation / develop / develop Issue 6 / develop Issue 6 code / TCP.sea / TCP / NewsWatcher / NW Source / Source / thread.c < prev    next >
MacBinary  |  1995-02-11  |  24.9 KB  |  [TEXT/MMCC]

open in: MacOS 8.1     |     Win98     |     DOS

browse contents    |     view JSON data     |     view as text


This file was processed as: MacBinary (archive/macBinary).

ConfidenceProgramDetectionMatch TypeSupport
66% dexvert Compact Compressed (Unix) (archive/compact) ext Supported
1% dexvert MacBinary (archive/macBinary) fallback Supported
1% dexvert Text File (text/txt) fallback Supported
100% file MacBinary II, inited, Sat Feb 11 15:58:34 1995, modified Sat Feb 11 15:58:34 1995, creator 'MMCC', type ASCII, 24726 bytes "thread.c" , at 0x6116 410 bytes resource default (weak)
99% file data default
74% TrID Macintosh plain text (MacBinary) default
25% TrID MacBinary 2 default (weak)
100% dearkID deark: macbinary default
100% siegfried fmt/1762 MacBinary (II) default
100% lsar MacBinary default


id metadata
keyvalue
macFileType[TEXT]
macFileCreator[MMCC]



hex view
+--------+-------------------------+-------------------------+--------+--------+
|00000000| 00 08 74 68 72 65 61 64 | 2e 63 00 00 00 00 00 00 |..thread|.c......|
|00000010| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000020| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000030| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000040| 00 54 45 58 54 4d 4d 43 | 43 01 00 00 00 00 00 00 |.TEXTMMC|C.......|
|00000050| 00 00 00 00 00 60 96 00 | 00 01 9a ab 62 d5 7a ab |.....`..|....b.z.|
|00000060| 62 d5 7a 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |b.z.....|........|
|00000070| 00 00 00 00 00 00 00 00 | 00 00 81 81 e6 01 00 00 |........|........|
|00000080| 2f 2a 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |/*------|--------|
|00000090| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000000a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000000b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000000c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 0d 0d |--------|------..|
|000000d0| 09 74 68 72 65 61 64 2e | 63 0d 0d 09 54 68 69 73 |.thread.|c...This|
|000000e0| 20 6d 6f 64 75 6c 65 20 | 68 61 6e 64 6c 65 73 20 | module |handles |
|000000f0| 73 6f 72 74 69 6e 67 20 | 73 75 62 6a 65 63 74 20 |sorting |subject |
|00000100| 77 69 6e 64 6f 77 73 20 | 69 6e 74 6f 20 74 68 72 |windows |into thr|
|00000110| 65 61 64 73 2e 0d 09 0d | 09 43 6f 70 79 72 69 67 |eads....|.Copyrig|
|00000120| 68 74 20 a9 20 31 39 39 | 34 2d 31 39 39 35 2c 20 |ht . 199|4-1995, |
|00000130| 4e 6f 72 74 68 77 65 73 | 74 65 72 6e 20 55 6e 69 |Northwes|tern Uni|
|00000140| 76 65 72 73 69 74 79 2e | 0d 0d 2d 2d 2d 2d 2d 2d |versity.|..------|
|00000150| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000160| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000170| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000180| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000190| 2d 2d 2d 2d 2d 2d 2a 2f | 0d 0d 23 69 6e 63 6c 75 |------*/|..#inclu|
|000001a0| 64 65 20 3c 73 74 72 69 | 6e 67 2e 68 3e 0d 23 69 |de <stri|ng.h>.#i|
|000001b0| 6e 63 6c 75 64 65 20 3c | 63 74 79 70 65 2e 68 3e |nclude <|ctype.h>|
|000001c0| 0d 23 69 6e 63 6c 75 64 | 65 20 3c 73 74 64 69 6f |.#includ|e <stdio|
|000001d0| 2e 68 3e 0d 0d 23 69 6e | 63 6c 75 64 65 20 22 67 |.h>..#in|clude "g|
|000001e0| 6c 6f 62 2e 68 22 0d 23 | 69 6e 63 6c 75 64 65 20 |lob.h".#|include |
|000001f0| 22 74 68 72 65 61 64 2e | 68 22 0d 23 69 6e 63 6c |"thread.|h".#incl|
|00000200| 75 64 65 20 22 71 73 6f | 72 74 2e 68 22 0d 23 69 |ude "qso|rt.h".#i|
|00000210| 6e 63 6c 75 64 65 20 22 | 6e 65 77 73 77 61 74 63 |nclude "|newswatc|
|00000220| 68 65 72 2e 68 22 0d 23 | 69 6e 63 6c 75 64 65 20 |her.h".#|include |
|00000230| 22 73 74 72 75 74 69 6c | 2e 68 22 0d 23 69 6e 63 |"strutil|.h".#inc|
|00000240| 6c 75 64 65 20 22 6d 65 | 6d 75 74 69 6c 2e 68 22 |lude "me|mutil.h"|
|00000250| 0d 23 69 6e 63 6c 75 64 | 65 20 22 64 69 61 6c 6f |.#includ|e "dialo|
|00000260| 67 2e 68 22 0d 23 69 6e | 63 6c 75 64 65 20 22 68 |g.h".#in|clude "h|
|00000270| 65 61 64 65 72 2e 68 22 | 0d 23 69 6e 63 6c 75 64 |eader.h"|.#includ|
|00000280| 65 20 22 63 61 63 68 65 | 2e 68 22 0d 0d 0d 0d 74 |e "cache|.h"....t|
|00000290| 79 70 65 64 65 66 20 73 | 74 72 75 63 74 20 54 53 |ypedef s|truct TS|
|000002a0| 6f 72 74 49 6e 66 6f 20 | 7b 0d 09 63 68 61 72 20 |ortInfo |{..char |
|000002b0| 2a 63 61 6e 6f 6e 3b 09 | 09 09 09 2f 2a 20 70 74 |*canon;.|.../* pt|
|000002c0| 72 20 74 6f 20 63 61 6e | 6f 6e 69 63 61 6c 20 73 |r to can|onical s|
|000002d0| 75 62 6a 65 63 74 20 73 | 74 72 69 6e 67 20 2a 2f |ubject s|tring */|
|000002e0| 0d 09 54 53 75 62 6a 65 | 63 74 20 2a 73 75 62 6a |..TSubje|ct *subj|
|000002f0| 65 63 74 3b 09 09 09 2f | 2a 20 70 74 72 20 74 6f |ect;.../|* ptr to|
|00000300| 20 73 75 62 6a 65 63 74 | 20 61 72 72 61 79 20 65 | subject| array e|
|00000310| 6c 65 6d 65 6e 74 20 2a | 2f 0d 09 73 68 6f 72 74 |lement *|/..short|
|00000320| 20 69 6e 64 65 78 3b 09 | 09 09 09 2f 2a 20 69 6e | index;.|.../* in|
|00000330| 64 65 78 20 69 6e 20 73 | 75 62 6a 65 63 74 20 61 |dex in s|ubject a|
|00000340| 72 72 61 79 20 2a 2f 0d | 09 6c 6f 6e 67 20 6e 75 |rray */.|.long nu|
|00000350| 6d 62 65 72 3b 09 09 09 | 09 2f 2a 20 61 72 74 69 |mber;...|./* arti|
|00000360| 63 6c 65 20 6e 75 6d 62 | 65 72 20 2a 2f 0d 09 73 |cle numb|er */..s|
|00000370| 68 6f 72 74 20 70 61 72 | 74 4e 75 6d 3b 09 09 09 |hort par|tNum;...|
|00000380| 09 2f 2a 20 70 61 72 74 | 20 6e 75 6d 62 65 72 2c |./* part| number,|
|00000390| 20 6f 72 20 30 78 37 66 | 66 66 20 69 66 20 6e 6f | or 0x7f|ff if no|
|000003a0| 74 20 61 20 70 61 72 74 | 20 2a 2f 0d 09 73 68 6f |t a part| */..sho|
|000003b0| 72 74 20 6e 75 6d 50 61 | 72 74 73 3b 09 09 09 09 |rt numPa|rts;....|
|000003c0| 2f 2a 20 6e 75 6d 62 65 | 72 20 6f 66 20 70 61 72 |/* numbe|r of par|
|000003d0| 74 73 2c 20 6f 72 20 30 | 78 37 66 66 66 20 69 66 |ts, or 0|x7fff if|
|000003e0| 20 6e 6f 74 20 61 20 70 | 61 72 74 20 2a 2f 0d 09 | not a p|art */..|
|000003f0| 6c 6f 6e 67 20 74 68 72 | 65 61 64 48 65 61 64 4e |long thr|eadHeadN|
|00000400| 75 6d 62 65 72 3b 09 09 | 2f 2a 20 61 72 74 69 63 |umber;..|/* artic|
|00000410| 6c 65 20 6e 75 6d 62 65 | 72 20 6f 66 20 66 69 72 |le numbe|r of fir|
|00000420| 73 74 20 61 72 74 69 63 | 6c 65 20 69 6e 20 74 68 |st artic|le in th|
|00000430| 72 65 61 64 20 20 2a 2f | 0d 09 73 68 6f 72 74 20 |read */|..short |
|00000440| 74 68 72 65 61 64 4f 72 | 64 69 6e 61 6c 3b 09 09 |threadOr|dinal;..|
|00000450| 2f 2a 20 61 72 74 69 63 | 6c 65 20 6f 72 64 69 6e |/* artic|le ordin|
|00000460| 61 6c 20 69 6e 20 74 68 | 72 65 61 64 20 28 31 2c |al in th|read (1,|
|00000470| 32 2c 33 2c 2e 2e 2e 29 | 20 2a 2f 0d 09 42 6f 6f |2,3,...)| */..Boo|
|00000480| 6c 65 61 6e 20 66 72 6f | 6d 43 61 63 68 65 3b 09 |lean fro|mCache;.|
|00000490| 09 09 2f 2a 20 74 72 75 | 65 20 69 66 20 66 72 6f |../* tru|e if fro|
|000004a0| 6d 20 63 61 63 68 65 20 | 2a 2f 0d 09 42 6f 6f 6c |m cache |*/..Bool|
|000004b0| 65 61 6e 20 70 6f 74 65 | 6e 74 69 61 6c 50 61 72 |ean pote|ntialPar|
|000004c0| 74 3b 09 09 2f 2a 20 74 | 72 75 65 20 69 66 20 70 |t;../* t|rue if p|
|000004d0| 6f 74 65 6e 74 69 61 6c | 20 70 61 72 74 20 2a 2f |otential| part */|
|000004e0| 0d 7d 20 54 53 6f 72 74 | 49 6e 66 6f 2c 20 2a 54 |.} TSort|Info, *T|
|000004f0| 53 6f 72 74 49 6e 66 6f | 50 74 72 2c 20 2a 2a 54 |SortInfo|Ptr, **T|
|00000500| 53 6f 72 74 49 6e 66 6f | 48 61 6e 64 6c 65 3b 0d |SortInfo|Handle;.|
|00000510| 0d 0d 0d 73 74 61 74 69 | 63 20 43 53 74 72 32 35 |...stati|c CStr25|
|00000520| 35 20 67 47 72 6f 75 70 | 4e 61 6d 65 3b 09 09 09 |5 gGroup|Name;...|
|00000530| 09 2f 2a 20 67 72 6f 75 | 70 20 6e 61 6d 65 20 2a |./* grou|p name *|
|00000540| 2f 0d 73 74 61 74 69 63 | 20 48 61 6e 64 6c 65 20 |/.static| Handle |
|00000550| 67 53 74 72 69 6e 67 73 | 3b 09 09 09 09 09 2f 2a |gStrings|;...../*|
|00000560| 20 68 61 6e 64 6c 65 20 | 74 6f 20 73 75 62 6a 65 | handle |to subje|
|00000570| 63 74 20 61 6e 64 20 61 | 75 74 68 6f 72 20 73 74 |ct and a|uthor st|
|00000580| 72 69 6e 67 73 20 2a 2f | 0d 73 74 61 74 69 63 20 |rings */|.static |
|00000590| 42 6f 6f 6c 65 61 6e 20 | 67 50 61 72 65 6e 74 49 |Boolean |gParentI|
|000005a0| 73 55 73 65 72 47 72 6f | 75 70 4c 69 73 74 3b 09 |sUserGro|upList;.|
|000005b0| 2f 2a 20 74 72 75 65 20 | 69 66 20 70 61 72 65 6e |/* true |if paren|
|000005c0| 74 20 77 69 6e 64 6f 77 | 20 69 73 20 75 73 65 72 |t window| is user|
|000005d0| 20 67 72 6f 75 70 20 6c | 69 73 74 20 2a 2f 0d 0d | group l|ist */..|
|000005e0| 0d 0d 2f 2a 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |../*----|--------|
|000005f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000600| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000610| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000620| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000630| 0d 09 49 73 50 61 72 74 | 54 61 69 6c 20 0d 09 0d |..IsPart|Tail ...|
|00000640| 09 43 68 65 63 6b 20 73 | 74 72 69 6e 67 20 66 6f |.Check s|tring fo|
|00000650| 72 20 74 61 69 6c 20 6f | 66 20 70 61 72 74 20 69 |r tail o|f part i|
|00000660| 6e 64 69 63 61 74 6f 72 | 2e 0d 09 0d 09 45 6e 74 |ndicator|.....Ent|
|00000670| 72 79 3a 09 78 20 3d 20 | 70 6f 69 6e 74 65 72 20 |ry:.x = |pointer |
|00000680| 74 6f 20 73 74 72 69 6e | 67 2e 0d 09 09 09 6c 61 |to strin|g.....la|
|00000690| 73 74 43 68 61 72 20 3d | 20 72 65 71 75 69 72 65 |stChar =| require|
|000006a0| 64 20 74 72 61 69 6c 69 | 6e 67 20 63 68 61 72 61 |d traili|ng chara|
|000006b0| 63 74 65 72 2c 20 6f 72 | 20 30 20 69 66 20 6e 6f |cter, or| 0 if no|
|000006c0| 6e 65 2e 0d 09 09 09 0d | 09 45 78 69 74 3a 09 66 |ne......|.Exit:.f|
|000006d0| 75 6e 63 74 69 6f 6e 20 | 72 65 73 75 6c 74 20 3d |unction |result =|
|000006e0| 20 74 72 75 65 20 69 66 | 20 65 6e 64 20 6f 66 20 | true if| end of |
|000006f0| 70 61 72 74 20 69 6e 64 | 69 63 61 74 6f 72 2c 20 |part ind|icator, |
|00000700| 69 6e 20 77 68 69 63 68 | 20 63 61 73 65 3a 0d 09 |in which| case:..|
|00000710| 09 09 09 2a 65 6e 64 20 | 3d 20 70 6f 69 6e 74 65 |...*end |= pointe|
|00000720| 72 20 74 6f 20 63 68 61 | 72 61 63 74 65 72 20 66 |r to cha|racter f|
|00000730| 6f 6c 6c 6f 77 69 6e 67 | 20 65 6e 64 20 6f 66 20 |ollowing| end of |
|00000740| 70 61 72 74 20 69 6e 64 | 69 63 61 74 6f 72 2e 0d |part ind|icator..|
|00000750| 09 09 09 09 2a 70 61 72 | 74 4e 75 6d 20 3d 20 70 |....*par|tNum = p|
|00000760| 61 72 74 20 6e 75 6d 62 | 65 72 2e 0d 09 09 09 09 |art numb|er......|
|00000770| 2a 6e 75 6d 50 61 72 74 | 73 20 3d 20 6e 75 6d 62 |*numPart|s = numb|
|00000780| 65 72 20 6f 66 20 70 61 | 72 74 73 2e 0d 2d 2d 2d |er of pa|rts..---|
|00000790| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000007a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000007b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000007c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000007d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2a 2f 0d 0d 73 74 61 |--------|-*/..sta|
|000007e0| 74 69 63 20 42 6f 6f 6c | 65 61 6e 20 49 73 50 61 |tic Bool|ean IsPa|
|000007f0| 72 74 54 61 69 6c 20 28 | 63 68 61 72 20 2a 78 2c |rtTail (|char *x,|
|00000800| 20 63 68 61 72 20 6c 61 | 73 74 43 68 61 72 2c 20 | char la|stChar, |
|00000810| 63 68 61 72 20 2a 2a 65 | 6e 64 2c 20 73 68 6f 72 |char **e|nd, shor|
|00000820| 74 20 2a 70 61 72 74 4e | 75 6d 2c 0d 09 73 68 6f |t *partN|um,..sho|
|00000830| 72 74 20 2a 6e 75 6d 50 | 61 72 74 73 29 0d 7b 0d |rt *numP|arts).{.|
|00000840| 09 73 68 6f 72 74 20 70 | 4e 75 6d 2c 20 6e 75 6d |.short p|Num, num|
|00000850| 50 3b 0d 0d 09 77 68 69 | 6c 65 20 28 69 73 4c 57 |P;...whi|le (isLW|
|00000860| 53 50 28 2a 78 29 29 20 | 78 2b 2b 3b 0d 09 69 66 |SP(*x)) |x++;..if|
|00000870| 20 28 21 69 73 64 69 67 | 69 74 28 2a 78 29 29 20 | (!isdig|it(*x)) |
|00000880| 72 65 74 75 72 6e 20 66 | 61 6c 73 65 3b 0d 09 70 |return f|alse;..p|
|00000890| 4e 75 6d 20 3d 20 43 72 | 61 63 6b 4e 75 6d 28 26 |Num = Cr|ackNum(&|
|000008a0| 78 29 3b 0d 09 77 68 69 | 6c 65 20 28 69 73 4c 57 |x);..whi|le (isLW|
|000008b0| 53 50 28 2a 78 29 29 20 | 78 2b 2b 3b 0d 09 69 66 |SP(*x)) |x++;..if|
|000008c0| 20 28 2a 78 20 3d 3d 20 | 27 2f 27 20 7c 7c 20 2a | (*x == |'/' || *|
|000008d0| 78 20 3d 3d 20 27 7c 27 | 20 7c 7c 20 2a 78 20 3d |x == '|'| || *x =|
|000008e0| 3d 20 27 5c 5c 27 29 20 | 7b 0d 09 09 78 2b 2b 3b |= '\\') |{...x++;|
|000008f0| 0d 09 7d 20 65 6c 73 65 | 20 69 66 20 28 73 74 72 |..} else| if (str|
|00000900| 6e 63 6d 70 28 78 2c 20 | 22 6f 66 22 2c 20 32 29 |ncmp(x, |"of", 2)|
|00000910| 20 3d 3d 20 30 29 20 7b | 0d 09 09 78 20 2b 3d 20 | == 0) {|...x += |
|00000920| 32 3b 0d 09 7d 20 65 6c | 73 65 20 7b 0d 09 09 72 |2;..} el|se {...r|
|00000930| 65 74 75 72 6e 20 66 61 | 6c 73 65 3b 0d 09 7d 0d |eturn fa|lse;..}.|
|00000940| 09 77 68 69 6c 65 20 28 | 69 73 4c 57 53 50 28 2a |.while (|isLWSP(*|
|00000950| 78 29 29 20 78 2b 2b 3b | 0d 09 69 66 20 28 21 69 |x)) x++;|..if (!i|
|00000960| 73 64 69 67 69 74 28 2a | 78 29 29 20 72 65 74 75 |sdigit(*|x)) retu|
|00000970| 72 6e 20 66 61 6c 73 65 | 3b 0d 09 6e 75 6d 50 20 |rn false|;..numP |
|00000980| 3d 20 43 72 61 63 6b 4e | 75 6d 28 26 78 29 3b 0d |= CrackN|um(&x);.|
|00000990| 09 69 66 20 28 70 4e 75 | 6d 20 3e 20 6e 75 6d 50 |.if (pNu|m > numP|
|000009a0| 29 20 72 65 74 75 72 6e | 20 66 61 6c 73 65 3b 0d |) return| false;.|
|000009b0| 09 69 66 20 28 6c 61 73 | 74 43 68 61 72 20 21 3d |.if (las|tChar !=|
|000009c0| 20 30 29 20 7b 0d 09 09 | 77 68 69 6c 65 20 28 69 | 0) {...|while (i|
|000009d0| 73 4c 57 53 50 28 2a 78 | 29 29 20 78 2b 2b 3b 0d |sLWSP(*x|)) x++;.|
|000009e0| 09 09 69 66 20 28 2a 78 | 20 21 3d 20 6c 61 73 74 |..if (*x| != last|
|000009f0| 43 68 61 72 29 20 72 65 | 74 75 72 6e 20 66 61 6c |Char) re|turn fal|
|00000a00| 73 65 3b 0d 09 09 78 2b | 2b 3b 0d 09 7d 0d 09 77 |se;...x+|+;..}..w|
|00000a10| 68 69 6c 65 20 28 69 73 | 4c 57 53 50 28 2a 78 29 |hile (is|LWSP(*x)|
|00000a20| 29 20 78 2b 2b 3b 0d 09 | 2a 65 6e 64 20 3d 20 78 |) x++;..|*end = x|
|00000a30| 3b 0d 09 2a 70 61 72 74 | 4e 75 6d 20 3d 20 70 4e |;..*part|Num = pN|
|00000a40| 75 6d 3b 0d 09 2a 6e 75 | 6d 50 61 72 74 73 20 3d |um;..*nu|mParts =|
|00000a50| 20 6e 75 6d 50 3b 0d 09 | 72 65 74 75 72 6e 20 74 | numP;..|return t|
|00000a60| 72 75 65 3b 0d 7d 0d 0d | 0d 0d 2f 2a 2d 2d 2d 2d |rue;.}..|../*----|
|00000a70| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000a80| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000a90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000aa0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000ab0| 2d 2d 2d 2d 2d 2d 2d 2d | 0d 09 43 68 65 63 6b 46 |--------|..CheckF|
|00000ac0| 6f 72 50 61 72 74 49 6e | 64 69 63 61 74 6f 72 20 |orPartIn|dicator |
|00000ad0| 0d 09 0d 09 43 68 65 63 | 6b 20 73 75 62 6a 65 63 |....Chec|k subjec|
|00000ae0| 74 20 66 6f 72 20 70 61 | 72 74 20 69 6e 64 69 63 |t for pa|rt indic|
|00000af0| 61 74 6f 72 2e 0d 09 0d | 09 45 6e 74 72 79 3a 09 |ator....|.Entry:.|
|00000b00| 70 20 3d 20 70 6f 69 6e | 74 65 72 20 74 6f 20 73 |p = poin|ter to s|
|00000b10| 6f 72 74 20 69 6e 66 6f | 20 72 65 63 6f 72 64 2e |ort info| record.|
|00000b20| 0d 09 09 09 0d 09 45 78 | 69 74 3a 09 49 66 20 74 |......Ex|it:.If t|
|00000b30| 68 65 20 73 75 62 6a 65 | 63 74 20 63 6f 6e 74 61 |he subje|ct conta|
|00000b40| 69 6e 73 20 61 20 70 61 | 72 74 20 69 6e 64 69 63 |ins a pa|rt indic|
|00000b50| 61 74 6f 72 3a 0d 09 09 | 09 09 70 2d 3e 70 61 72 |ator:...|..p->par|
|00000b60| 74 4e 75 6d 20 3d 20 70 | 61 72 74 20 6e 75 6d 62 |tNum = p|art numb|
|00000b70| 65 72 2e 0d 09 09 09 09 | 70 2d 3e 6e 75 6d 50 61 |er......|p->numPa|
|00000b80| 72 74 73 20 3d 20 6e 75 | 6d 62 65 72 20 6f 66 20 |rts = nu|mber of |
|00000b90| 70 61 72 74 73 2e 0d 09 | 09 09 09 70 2d 3e 70 6f |parts...|...p->po|
|00000ba0| 74 65 6e 74 69 61 6c 50 | 61 72 74 20 3d 20 74 72 |tentialP|art = tr|
|00000bb0| 75 65 20 69 66 20 70 6f | 74 65 6e 74 69 61 6c 20 |ue if po|tential |
|00000bc0| 70 61 72 74 2e 0d 09 09 | 09 09 70 61 72 74 20 69 |part....|..part i|
|00000bd0| 6e 64 69 63 61 74 6f 72 | 20 73 75 62 73 74 72 69 |ndicator| substri|
|00000be0| 6e 67 20 73 74 72 69 70 | 70 65 64 20 66 72 6f 6d |ng strip|ped from|
|00000bf0| 20 70 2d 3e 63 61 6e 6f | 6e 2e 0d 09 09 09 09 69 | p->cano|n......i|
|00000c00| 66 20 74 68 65 20 70 61 | 72 74 20 69 6e 64 69 63 |f the pa|rt indic|
|00000c10| 61 74 6f 72 20 69 73 20 | 70 72 65 63 65 64 65 64 |ator is |preceded|
|00000c20| 20 62 79 20 6e 6f 6e 2d | 77 68 69 74 65 20 73 70 | by non-|white sp|
|00000c30| 61 63 65 2c 20 74 68 65 | 20 0d 09 09 09 09 09 74 |ace, the| ......t|
|00000c40| 61 69 6c 20 6f 66 20 74 | 68 65 20 73 75 62 6a 65 |ail of t|he subje|
|00000c50| 63 74 20 69 73 20 61 6c | 73 6f 20 73 74 72 69 70 |ct is al|so strip|
|00000c60| 70 65 64 20 66 72 6f 6d | 20 70 2d 3e 63 61 6e 6f |ped from| p->cano|
|00000c70| 6e 2e 0d 09 09 09 09 6e | 75 6d 62 65 72 20 6f 66 |n......n|umber of|
|00000c80| 20 70 61 72 74 73 20 61 | 70 70 65 6e 64 65 64 20 | parts a|ppended |
|00000c90| 74 6f 20 65 6e 64 20 6f | 66 20 70 2d 3e 63 61 6e |to end o|f p->can|
|00000ca0| 6f 6e 2e 0d 09 09 09 09 | 0d 09 50 61 72 74 20 69 |on......|..Part i|
|00000cb0| 6e 64 69 63 61 74 6f 72 | 73 20 61 72 65 20 64 65 |ndicator|s are de|
|00000cc0| 66 69 6e 65 64 20 61 73 | 20 66 6f 6c 6c 6f 77 73 |fined as| follows|
|00000cd0| 2c 20 75 73 69 6e 67 20 | 74 68 65 20 6e 6f 74 61 |, using |the nota|
|00000ce0| 74 69 6f 6e 20 6f 66 20 | 52 46 43 20 38 32 32 3a |tion of |RFC 822:|
|00000cf0| 0d 0d 09 20 20 20 20 70 | 61 72 74 2d 69 6e 64 69 |... p|art-indi|
|00000d00| 63 61 74 6f 72 20 3d 20 | 22 70 61 72 74 22 20 70 |cator = |"part" p|
|00000d10| 61 72 74 2d 6e 2d 6f 66 | 2d 6d 0d 09 20 20 20 20 |art-n-of|-m.. |
|00000d20| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 2f | | /|
|00000d30| 20 22 28 22 20 70 61 72 | 74 2d 6e 2d 6f 66 2d 6d | "(" par|t-n-of-m|
|00000d40| 20 22 29 22 0d 09 20 20 | 20 20 20 20 20 20 20 20 | ")".. | |
|00000d50| 20 20 20 20 20 20 20 20 | 20 2f 20 22 5b 22 20 70 | | / "[" p|
|00000d60| 61 72 74 2d 6e 2d 6f 66 | 2d 6d 20 22 5d 22 0d 09 |art-n-of|-m "]"..|
|00000d70| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000d80| 20 20 20 2f 20 22 7b 22 | 20 70 61 72 74 2d 6e 2d | / "{"| part-n-|
|00000d90| 6f 66 2d 6d 20 22 7d 22 | 0d 09 20 20 20 20 20 20 |of-m "}"|.. |
|00000da0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 2f 20 22 | | / "|
|00000db0| 3c 22 20 70 61 72 74 2d | 6e 2d 6f 66 2d 6d 20 22 |<" part-|n-of-m "|
|00000dc0| 3e 22 0d 09 0d 09 20 20 | 20 20 70 61 72 74 2d 6e |>".... | part-n|
|00000dd0| 2d 6f 66 2d 6d 20 3d 20 | 6e 75 6d 62 65 72 20 22 |-of-m = |number "|
|00000de0| 6f 66 22 20 6e 75 6d 62 | 65 72 0d 09 20 20 20 20 |of" numb|er.. |
|00000df0| 20 20 20 20 20 20 20 20 | 20 20 20 20 2f 20 6e 75 | | / nu|
|00000e00| 6d 62 65 72 20 22 2f 22 | 20 6e 75 6d 62 65 72 0d |mber "/"| number.|
|00000e10| 09 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |. | |
|00000e20| 20 2f 20 6e 75 6d 62 65 | 72 20 22 7c 22 20 6e 75 | / numbe|r "|" nu|
|00000e30| 6d 62 65 72 20 20 20 20 | 20 20 20 20 0d 09 20 20 |mber | .. |
|00000e40| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 2f 20 | | / |
|00000e50| 6e 75 6d 62 65 72 20 22 | 5c 22 20 6e 75 6d 62 65 |number "|\" numbe|
|00000e60| 72 09 09 3b 20 66 69 72 | 73 74 20 6e 75 6d 62 65 |r..; fir|st numbe|
|00000e70| 72 20 3c 3d 20 73 65 63 | 6f 6e 64 20 6e 75 6d 62 |r <= sec|ond numb|
|00000e80| 65 72 0d 0d 09 09 6e 75 | 6d 62 65 72 20 3d 20 31 |er....nu|mber = 1|
|00000e90| 2a 44 49 47 49 54 0d 09 | 09 0d 09 49 66 20 74 68 |*DIGIT..|...If th|
|00000ea0| 65 20 73 75 62 6a 65 63 | 74 20 63 6f 6e 74 61 69 |e subjec|t contai|
|00000eb0| 6e 73 20 61 20 70 61 72 | 74 20 69 6e 64 69 63 61 |ns a par|t indica|
|00000ec0| 74 6f 72 2c 20 61 6e 79 | 20 73 75 62 6a 65 63 74 |tor, any| subject|
|00000ed0| 20 70 72 65 66 69 78 20 | 69 6e 20 74 68 65 20 0d | prefix |in the .|
|00000ee0| 09 66 6f 6c 6c 6f 77 69 | 6e 67 20 66 6f 72 6d 61 |.followi|ng forma|
|00000ef0| 74 20 69 73 20 61 6c 73 | 6f 20 73 74 72 69 70 70 |t is als|o stripp|
|00000f00| 65 64 20 28 66 6f 72 20 | 74 68 65 20 63 6f 6d 70 |ed (for |the comp|
|00000f10| 2e 62 69 6e 61 72 69 65 | 73 2e 69 62 6d 2e 2a 20 |.binarie|s.ibm.* |
|00000f20| 67 72 6f 75 70 73 29 3a | 0d 0d 09 09 22 76 22 20 |groups):|...."v" |
|00000f30| 6e 75 6d 62 65 72 20 22 | 69 22 20 6e 75 6d 62 65 |number "|i" numbe|
|00000f40| 72 20 22 3a 22 0d 09 09 | 0d 09 41 20 22 70 6f 74 |r ":"...|..A "pot|
|00000f50| 65 6e 74 69 61 6c 22 20 | 70 61 72 74 20 69 73 20 |ential" |part is |
|00000f60| 61 20 22 70 61 72 74 2d | 6e 2d 6f 66 2d 6d 22 2c |a "part-|n-of-m",|
|00000f70| 20 65 2e 67 2e 2c 20 61 | 20 70 61 72 74 20 69 6e | e.g., a| part in|
|00000f80| 64 69 63 61 74 6f 72 20 | 77 69 74 68 6f 75 74 20 |dicator |without |
|00000f90| 74 68 65 0d 09 77 6f 72 | 64 20 22 70 61 72 74 22 |the..wor|d "part"|
|00000fa0| 20 69 6e 20 66 72 6f 6e | 74 20 6f 72 20 74 68 65 | in fron|t or the|
|00000fb0| 20 62 72 61 63 6b 65 74 | 73 2e 20 41 20 22 70 6f | bracket|s. A "po|
|00000fc0| 74 65 6e 74 69 61 6c 22 | 20 70 61 72 74 20 69 73 |tential"| part is|
|00000fd0| 20 73 70 65 63 69 61 6c | 20 63 61 73 65 64 2e 0d | special| cased..|
|00000fe0| 09 49 74 20 69 73 20 63 | 6f 6e 73 69 64 65 72 65 |.It is c|onsidere|
|00000ff0| 64 20 74 6f 20 62 65 20 | 61 20 70 61 72 74 20 69 |d to be |a part i|
|00001000| 66 20 61 6e 64 20 6f 6e | 6c 79 20 69 66 20 73 6f |f and on|ly if so|
|00001010| 6d 65 20 6f 74 68 65 72 | 20 6d 61 74 63 68 69 6e |me other| matchin|
|00001020| 67 20 70 61 72 74 20 69 | 73 0d 09 61 6c 73 6f 20 |g part i|s..also |
|00001030| 70 72 65 73 65 6e 74 20 | 69 6e 20 74 68 65 20 73 |present |in the s|
|00001040| 75 62 6a 65 63 74 20 6c | 69 73 74 2e 0d 2d 2d 2d |ubject l|ist..---|
|00001050| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001060| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001070| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001080| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001090| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2a 2f 0d 0d 73 74 61 |--------|-*/..sta|
|000010a0| 74 69 63 20 76 6f 69 64 | 20 43 68 65 63 6b 46 6f |tic void| CheckFo|
|000010b0| 72 50 61 72 74 49 6e 64 | 69 63 61 74 6f 72 20 28 |rPartInd|icator (|
|000010c0| 54 53 6f 72 74 49 6e 66 | 6f 50 74 72 20 70 29 0d |TSortInf|oPtr p).|
|000010d0| 7b 0d 09 63 68 61 72 20 | 2a 78 2c 20 2a 65 6e 64 |{..char |*x, *end|
|000010e0| 2c 20 2a 79 3b 0d 09 73 | 68 6f 72 74 20 70 61 72 |, *y;..s|hort par|
|000010f0| 74 4e 75 6d 2c 20 6e 75 | 6d 50 61 72 74 73 3b 0d |tNum, nu|mParts;.|
|00001100| 09 42 6f 6f 6c 65 61 6e | 20 70 6f 74 65 6e 74 69 |.Boolean| potenti|
|00001110| 61 6c 50 61 72 74 20 3d | 20 66 61 6c 73 65 3b 0d |alPart =| false;.|
|00001120| 09 0d 09 78 20 3d 20 70 | 2d 3e 63 61 6e 6f 6e 3b |...x = p|->canon;|
|00001130| 0d 09 77 68 69 6c 65 20 | 28 74 72 75 65 29 20 7b |..while |(true) {|
|00001140| 0d 09 09 78 20 3d 20 73 | 74 72 70 62 72 6b 28 78 |...x = s|trpbrk(x|
|00001150| 2c 20 22 28 5b 7b 3c 70 | 30 31 32 33 34 35 36 37 |, "([{<p|01234567|
|00001160| 38 39 22 29 3b 0d 09 09 | 69 66 20 28 78 20 3d 3d |89");...|if (x ==|
|00001170| 20 6e 69 6c 29 20 72 65 | 74 75 72 6e 3b 0d 09 09 | nil) re|turn;...|
|00001180| 69 66 20 28 2a 78 20 3d | 3d 20 27 28 27 29 20 7b |if (*x =|= '(') {|
|00001190| 0d 09 09 09 69 66 20 28 | 49 73 50 61 72 74 54 61 |....if (|IsPartTa|
|000011a0| 69 6c 28 78 2b 31 2c 20 | 27 29 27 2c 20 26 65 6e |il(x+1, |')', &en|
|000011b0| 64 2c 20 26 70 61 72 74 | 4e 75 6d 2c 20 26 6e 75 |d, &part|Num, &nu|
|000011c0| 6d 50 61 72 74 73 29 29 | 20 62 72 65 61 6b 3b 0d |mParts))| break;.|
|000011d0| 09 09 7d 20 65 6c 73 65 | 20 69 66 20 28 2a 78 20 |..} else| if (*x |
|000011e0| 3d 3d 20 27 5b 27 29 20 | 7b 0d 09 09 09 69 66 20 |== '[') |{....if |
|000011f0| 28 49 73 50 61 72 74 54 | 61 69 6c 28 78 2b 31 2c |(IsPartT|ail(x+1,|
|00001200| 20 27 5d 27 2c 20 26 65 | 6e 64 2c 20 26 70 61 72 | ']', &e|nd, &par|
|00001210| 74 4e 75 6d 2c 20 26 6e | 75 6d 50 61 72 74 73 29 |tNum, &n|umParts)|
|00001220| 29 20 62 72 65 61 6b 3b | 0d 09 09 7d 20 65 6c 73 |) break;|...} els|
|00001230| 65 20 69 66 20 28 2a 78 | 20 3d 3d 20 27 7b 27 29 |e if (*x| == '{')|
|00001240| 20 7b 0d 09 09 09 69 66 | 20 28 49 73 50 61 72 74 | {....if| (IsPart|
|00001250| 54 61 69 6c 28 78 2b 31 | 2c 20 27 7d 27 2c 20 26 |Tail(x+1|, '}', &|
|00001260| 65 6e 64 2c 20 26 70 61 | 72 74 4e 75 6d 2c 20 26 |end, &pa|rtNum, &|
|00001270| 6e 75 6d 50 61 72 74 73 | 29 29 20 62 72 65 61 6b |numParts|)) break|
|00001280| 3b 0d 09 09 7d 20 65 6c | 73 65 20 69 66 20 28 2a |;...} el|se if (*|
|00001290| 78 20 3d 3d 20 27 3c 27 | 29 20 7b 0d 09 09 09 69 |x == '<'|) {....i|
|000012a0| 66 20 28 49 73 50 61 72 | 74 54 61 69 6c 28 78 2b |f (IsPar|tTail(x+|
|000012b0| 31 2c 20 27 3e 27 2c 20 | 26 65 6e 64 2c 20 26 70 |1, '>', |&end, &p|
|000012c0| 61 72 74 4e 75 6d 2c 20 | 26 6e 75 6d 50 61 72 74 |artNum, |&numPart|
|000012d0| 73 29 29 20 62 72 65 61 | 6b 3b 0d 09 09 7d 20 65 |s)) brea|k;...} e|
|000012e0| 6c 73 65 20 69 66 20 28 | 2a 78 20 3d 3d 20 27 70 |lse if (|*x == 'p|
|000012f0| 27 20 26 26 20 73 74 72 | 6e 63 6d 70 28 78 2c 20 |' && str|ncmp(x, |
|00001300| 22 70 61 72 74 22 2c 20 | 34 29 20 3d 3d 20 30 29 |"part", |4) == 0)|
|00001310| 20 20 7b 0d 09 09 09 69 | 66 20 28 49 73 50 61 72 | {....i|f (IsPar|
|00001320| 74 54 61 69 6c 28 78 2b | 34 2c 20 30 2c 20 26 65 |tTail(x+|4, 0, &e|
|00001330| 6e 64 2c 20 26 70 61 72 | 74 4e 75 6d 2c 20 26 6e |nd, &par|tNum, &n|
|00001340| 75 6d 50 61 72 74 73 29 | 29 20 62 72 65 61 6b 3b |umParts)|) break;|
|00001350| 0d 09 09 7d 20 65 6c 73 | 65 20 7b 0d 09 09 09 69 |...} els|e {....i|
|00001360| 66 20 28 49 73 50 61 72 | 74 54 61 69 6c 28 78 2c |f (IsPar|tTail(x,|
|00001370| 20 30 2c 20 26 65 6e 64 | 2c 20 26 70 61 72 74 4e | 0, &end|, &partN|
|00001380| 75 6d 2c 20 26 6e 75 6d | 50 61 72 74 73 29 29 20 |um, &num|Parts)) |
|00001390| 7b 0d 09 09 09 09 70 6f | 74 65 6e 74 69 61 6c 50 |{.....po|tentialP|
|000013a0| 61 72 74 20 3d 20 74 72 | 75 65 3b 0d 09 09 09 09 |art = tr|ue;.....|
|000013b0| 62 72 65 61 6b 3b 0d 09 | 09 09 7d 0d 09 09 7d 0d |break;..|..}...}.|
|000013c0| 09 09 78 2b 2b 3b 0d 09 | 7d 0d 09 70 2d 3e 70 61 |..x++;..|}..p->pa|
|000013d0| 72 74 4e 75 6d 20 3d 20 | 70 61 72 74 4e 75 6d 3b |rtNum = |partNum;|
|000013e0| 0d 09 70 2d 3e 6e 75 6d | 50 61 72 74 73 20 3d 20 |..p->num|Parts = |
|000013f0| 6e 75 6d 50 61 72 74 73 | 3b 0d 09 70 2d 3e 70 6f |numParts|;..p->po|
|00001400| 74 65 6e 74 69 61 6c 50 | 61 72 74 20 3d 20 70 6f |tentialP|art = po|
|00001410| 74 65 6e 74 69 61 6c 50 | 61 72 74 3b 0d 09 79 20 |tentialP|art;..y |
|00001420| 3d 20 70 2d 3e 63 61 6e | 6f 6e 3b 0d 09 77 68 69 |= p->can|on;..whi|
|00001430| 6c 65 20 28 2a 79 20 3e | 3d 20 30 20 26 26 20 21 |le (*y >|= 0 && !|
|00001440| 69 73 61 6c 6e 75 6d 28 | 2a 79 29 29 20 79 2b 2b |isalnum(|*y)) y++|
|00001450| 3b 0d 09 69 66 20 28 78 | 20 3d 3d 20 79 29 20 7b |;..if (x| == y) {|
|00001460| 0d 09 09 42 6c 6f 63 6b | 4d 6f 76 65 44 61 74 61 |...Block|MoveData|
|00001470| 28 65 6e 64 2c 20 78 2c | 20 73 74 72 6c 65 6e 28 |(end, x,| strlen(|
|00001480| 65 6e 64 29 2b 31 29 3b | 0d 09 7d 20 65 6c 73 65 |end)+1);|..} else|
|00001490| 20 7b 0d 09 09 2a 78 20 | 3d 20 30 3b 0d 09 7d 0d | {...*x |= 0;..}.|
|000014a0| 09 78 20 3d 20 70 2d 3e | 63 61 6e 6f 6e 3b 0d 09 |.x = p->|canon;..|
|000014b0| 69 66 20 28 2a 78 20 3d | 3d 20 27 76 27 29 20 7b |if (*x =|= 'v') {|
|000014c0| 0d 09 09 78 2b 2b 3b 0d | 09 09 69 66 20 28 69 73 |...x++;.|..if (is|
|000014d0| 64 69 67 69 74 28 2a 78 | 29 29 20 7b 0d 09 09 09 |digit(*x|)) {....|
|000014e0| 78 2b 2b 3b 0d 09 09 09 | 77 68 69 6c 65 20 28 69 |x++;....|while (i|
|000014f0| 73 64 69 67 69 74 28 2a | 78 29 29 20 78 2b 2b 3b |sdigit(*|x)) x++;|
|00001500| 0d 09 09 09 69 66 20 28 | 2a 78 20 3d 3d 20 27 69 |....if (|*x == 'i|
|00001510| 27 29 20 7b 0d 09 09 09 | 09 78 2b 2b 3b 0d 09 09 |') {....|.x++;...|
|00001520| 09 09 69 66 20 28 69 73 | 64 69 67 69 74 28 2a 78 |..if (is|digit(*x|
|00001530| 29 29 20 7b 0d 09 09 09 | 09 09 78 2b 2b 3b 0d 09 |)) {....|..x++;..|
|00001540| 09 09 09 09 77 68 69 6c | 65 20 28 69 73 64 69 67 |....whil|e (isdig|
|00001550| 69 74 28 2a 78 29 29 20 | 78 2b 2b 3b 0d 09 09 09 |it(*x)) |x++;....|
|00001560| 09 09 69 66 20 28 2a 78 | 20 3d 3d 20 27 3a 27 29 |..if (*x| == ':')|
|00001570| 20 7b 0d 09 09 09 09 09 | 09 78 2b 2b 3b 0d 09 09 | {......|.x++;...|
|00001580| 09 09 09 09 77 68 69 6c | 65 20 28 69 73 4c 57 53 |....whil|e (isLWS|
|00001590| 50 28 2a 78 29 29 20 78 | 2b 2b 3b 0d 09 09 09 09 |P(*x)) x|++;.....|
|000015a0| 09 09 42 6c 6f 63 6b 4d | 6f 76 65 44 61 74 61 28 |..BlockM|oveData(|
|000015b0| 78 2c 20 70 2d 3e 63 61 | 6e 6f 6e 2c 20 73 74 72 |x, p->ca|non, str|
|000015c0| 6c 65 6e 28 78 29 2b 31 | 29 3b 0d 09 09 09 09 09 |len(x)+1|);......|
|000015d0| 7d 0d 09 09 09 09 7d 0d | 09 09 09 7d 0d 09 09 7d |}.....}.|...}...}|
|000015e0| 0d 09 7d 0d 09 78 20 3d | 20 70 2d 3e 63 61 6e 6f |..}..x =| p->cano|
|000015f0| 6e 3b 0d 09 77 68 69 6c | 65 20 28 2a 78 20 21 3d |n;..whil|e (*x !=|
|00001600| 20 30 29 20 78 2b 2b 3b | 0d 09 73 70 72 69 6e 74 | 0) x++;|..sprint|
|00001610| 66 28 78 2c 20 22 25 64 | 22 2c 20 6e 75 6d 50 61 |f(x, "%d|", numPa|
|00001620| 72 74 73 29 3b 0d 7d 0d | 0d 0d 0d 2f 2a 2d 2d 2d |rts);.}.|.../*---|
|00001630| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001640| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001650| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001660| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001670| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 0d 09 49 6e 69 74 53 |--------|-..InitS|
|00001680| 6f 72 74 49 6e 66 6f 20 | 0d 09 0d 09 49 6e 69 74 |ortInfo |....Init|
|00001690| 69 61 6c 69 7a 65 20 73 | 6f 72 74 69 6e 67 20 69 |ialize s|orting i|
|000016a0| 6e 66 6f 20 64 61 74 61 | 20 73 74 72 75 63 74 75 |nfo data| structu|
|000016b0| 72 65 73 2e 0d 09 0d 09 | 45 6e 74 72 79 3a 09 73 |res.....|Entry:.s|
|000016c0| 75 62 6a 65 63 74 41 72 | 72 61 79 20 3d 20 68 61 |ubjectAr|ray = ha|
|000016d0| 6e 64 6c 65 20 74 6f 20 | 73 75 62 6a 65 63 74 20 |ndle to |subject |
|000016e0| 61 72 72 61 79 2e 0d 09 | 09 09 6e 75 6d 53 75 62 |array...|..numSub|
|000016f0| 6a 65 63 74 73 20 3d 20 | 6e 75 6d 62 65 72 20 6f |jects = |number o|
|00001700| 66 20 73 75 62 6a 65 63 | 74 73 2e 0d 09 09 09 73 |f subjec|ts.....s|
|00001710| 74 72 69 6e 67 73 20 3d | 20 68 61 6e 64 6c 65 20 |trings =| handle |
|00001720| 74 6f 20 73 75 62 6a 65 | 63 74 20 73 74 72 69 6e |to subje|ct strin|
|00001730| 67 73 2e 0d 09 09 09 0d | 09 45 78 69 74 3a 09 66 |gs......|.Exit:.f|
|00001740| 75 6e 63 74 69 6f 6e 20 | 72 65 73 75 6c 74 20 3d |unction |result =|
|00001750| 20 65 72 72 6f 72 20 63 | 6f 64 65 2e 0d 09 09 09 | error c|ode.....|
|00001760| 2a 73 6f 72 74 49 6e 66 | 6f 20 3d 20 68 61 6e 64 |*sortInf|o = hand|
|00001770| 6c 65 20 74 6f 20 6c 6f | 63 6b 65 64 20 73 6f 72 |le to lo|cked sor|
|00001780| 74 20 69 6e 66 6f 20 61 | 72 72 61 79 2e 0d 09 09 |t info a|rray....|
|00001790| 09 2a 63 61 6e 6f 6e 69 | 63 61 6c 53 74 72 69 6e |.*canoni|calStrin|
|000017a0| 67 73 20 3d 20 68 61 6e | 64 6c 65 20 74 6f 20 6c |gs = han|dle to l|
|000017b0| 6f 63 6b 65 64 20 63 61 | 6e 6f 6e 69 63 61 6c 20 |ocked ca|nonical |
|000017c0| 73 75 62 6a 65 63 74 20 | 73 74 72 69 6e 67 73 2e |subject |strings.|
|000017d0| 0d 09 09 09 2a 73 6f 72 | 74 49 6e 66 6f 50 74 72 |....*sor|tInfoPtr|
|000017e0| 73 20 3d 20 68 61 6e 64 | 6c 65 20 74 6f 20 6c 6f |s = hand|le to lo|
|000017f0| 63 6b 65 64 20 61 72 72 | 61 79 20 6f 66 20 70 6f |cked arr|ay of po|
|00001800| 69 6e 74 65 72 73 20 69 | 6e 74 6f 20 74 68 65 20 |inters i|nto the |
|00001810| 0d 09 09 09 09 73 6f 72 | 74 20 69 6e 66 6f 20 61 |.....sor|t info a|
|00001820| 72 72 61 79 2e 0d 09 09 | 09 73 75 62 6a 65 63 74 |rray....|.subject|
|00001830| 20 61 72 72 61 79 20 6c | 6f 63 6b 65 64 2e 0d 2d | array l|ocked..-|
|00001840| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001850| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001860| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001870| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001880| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2a 2f 0d 0d 73 |--------|---*/..s|
|00001890| 74 61 74 69 63 20 4f 53 | 45 72 72 20 49 6e 69 74 |tatic OS|Err Init|
|000018a0| 53 6f 72 74 49 6e 66 6f | 20 28 54 53 75 62 6a 65 |SortInfo| (TSubje|
|000018b0| 63 74 20 2a 2a 73 75 62 | 6a 65 63 74 41 72 72 61 |ct **sub|jectArra|
|000018c0| 79 2c 20 73 68 6f 72 74 | 20 6e 75 6d 53 75 62 6a |y, short| numSubj|
|000018d0| 65 63 74 73 2c 20 48 61 | 6e 64 6c 65 20 73 74 72 |ects, Ha|ndle str|
|000018e0| 69 6e 67 73 2c 0d 09 54 | 53 6f 72 74 49 6e 66 6f |ings,..T|SortInfo|
|000018f0| 48 61 6e 64 6c 65 20 2a | 73 6f 72 74 49 6e 66 6f |Handle *|sortInfo|
|00001900| 2c 20 48 61 6e 64 6c 65 | 20 2a 63 61 6e 6f 6e 69 |, Handle| *canoni|
|00001910| 63 61 6c 53 74 72 69 6e | 67 73 2c 20 54 53 6f 72 |calStrin|gs, TSor|
|00001920| 74 49 6e 66 6f 50 74 72 | 20 2a 2a 2a 73 6f 72 74 |tInfoPtr| ***sort|
|00001930| 49 6e 66 6f 50 74 72 73 | 29 0d 7b 0d 09 54 53 6f |InfoPtrs|).{..TSo|
|00001940| 72 74 49 6e 66 6f 48 61 | 6e 64 6c 65 20 73 49 6e |rtInfoHa|ndle sIn|
|00001950| 66 6f 20 3d 20 6e 69 6c | 3b 0d 09 48 61 6e 64 6c |fo = nil|;..Handl|
|00001960| 65 20 63 53 74 72 69 6e | 67 73 20 3d 20 6e 69 6c |e cStrin|gs = nil|
|00001970| 3b 0d 09 54 53 6f 72 74 | 49 6e 66 6f 50 74 72 20 |;..TSort|InfoPtr |
|00001980| 2a 2a 73 49 6e 66 6f 50 | 74 72 73 20 3d 20 6e 69 |**sInfoP|trs = ni|
|00001990| 6c 3b 0d 09 4f 53 45 72 | 72 20 65 72 72 20 3d 20 |l;..OSEr|r err = |
|000019a0| 6e 6f 45 72 72 3b 0d 09 | 54 53 6f 72 74 49 6e 66 |noErr;..|TSortInf|
|000019b0| 6f 50 74 72 20 70 3b 0d | 09 54 53 75 62 6a 65 63 |oPtr p;.|.TSubjec|
|000019c0| 74 20 2a 71 3b 0d 09 54 | 53 6f 72 74 49 6e 66 6f |t *q;..T|SortInfo|
|000019d0| 50 74 72 20 2a 72 3b 0d | 09 73 68 6f 72 74 20 69 |Ptr *r;.|.short i|
|000019e0| 3b 0d 09 63 68 61 72 20 | 2a 63 61 6e 6f 6e 2c 20 |;..char |*canon, |
|000019f0| 2a 78 3b 0d 09 6c 6f 6e | 67 20 6c 65 6e 2c 20 72 |*x;..lon|g len, r|
|00001a00| 65 4c 65 6e 3b 0d 09 0d | 09 2f 2a 20 41 6c 6c 6f |eLen;...|./* Allo|
|00001a10| 63 61 74 65 20 6d 65 6d | 6f 72 79 2e 20 2a 2f 0d |cate mem|ory. */.|
|00001a20| 09 0d 09 65 72 72 20 3d | 20 4d 79 4e 65 77 48 61 |...err =| MyNewHa|
|00001a30| 6e 64 6c 65 28 6e 75 6d | 53 75 62 6a 65 63 74 73 |ndle(num|Subjects|
|00001a40| 20 2a 20 73 69 7a 65 6f | 66 28 54 53 6f 72 74 49 | * sizeo|f(TSortI|
|00001a50| 6e 66 6f 29 2c 20 26 73 | 49 6e 66 6f 29 3b 0d 09 |nfo), &s|Info);..|
|00001a60| 69 66 20 28 65 72 72 20 | 21 3d 20 6e 6f 45 72 72 |if (err |!= noErr|
|00001a70| 29 20 67 6f 74 6f 20 65 | 78 69 74 3b 0d 09 65 72 |) goto e|xit;..er|
|00001a80| 72 20 3d 20 4d 79 4e 65 | 77 48 61 6e 64 6c 65 28 |r = MyNe|wHandle(|
|00001a90| 4d 79 47 65 74 48 61 6e | 64 6c 65 53 69 7a 65 28 |MyGetHan|dleSize(|
|00001aa0| 73 74 72 69 6e 67 73 29 | 2c 20 26 63 53 74 72 69 |strings)|, &cStri|
|00001ab0| 6e 67 73 29 3b 0d 09 69 | 66 20 28 65 72 72 20 21 |ngs);..i|f (err !|
|00001ac0| 3d 20 6e 6f 45 72 72 29 | 20 67 6f 74 6f 20 65 78 |= noErr)| goto ex|
|00001ad0| 69 74 3b 0d 09 65 72 72 | 20 3d 20 4d 79 4e 65 77 |it;..err| = MyNew|
|00001ae0| 48 61 6e 64 6c 65 28 6e | 75 6d 53 75 62 6a 65 63 |Handle(n|umSubjec|
|00001af0| 74 73 20 2a 20 73 69 7a | 65 6f 66 28 54 53 6f 72 |ts * siz|eof(TSor|
|00001b00| 74 49 6e 66 6f 50 74 72 | 29 2c 20 26 73 49 6e 66 |tInfoPtr|), &sInf|
|00001b10| 6f 50 74 72 73 29 3b 0d | 09 69 66 20 28 65 72 72 |oPtrs);.|.if (err|
|00001b20| 20 21 3d 20 6e 6f 45 72 | 72 29 20 67 6f 74 6f 20 | != noEr|r) goto |
|00001b30| 65 78 69 74 3b 0d 09 0d | 09 2f 2a 20 4c 6f 63 6b |exit;...|./* Lock|
|00001b40| 20 65 76 65 72 79 74 68 | 69 6e 67 2e 20 2a 2f 0d | everyth|ing. */.|
|00001b50| 09 0d 09 4d 79 48 4c 6f | 63 6b 28 73 49 6e 66 6f |...MyHLo|ck(sInfo|
|00001b60| 29 3b 0d 09 4d 79 48 4c | 6f 63 6b 28 63 53 74 72 |);..MyHL|ock(cStr|
|00001b70| 69 6e 67 73 29 3b 0d 09 | 4d 79 48 4c 6f 63 6b 28 |ings);..|MyHLock(|
|00001b80| 73 49 6e 66 6f 50 74 72 | 73 29 3b 0d 09 4d 79 48 |sInfoPtr|s);..MyH|
|00001b90| 4c 6f 63 6b 28 73 75 62 | 6a 65 63 74 41 72 72 61 |Lock(sub|jectArra|
|00001ba0| 79 29 3b 0d 09 0d 09 66 | 6f 72 20 28 69 20 3d 20 |y);....f|or (i = |
|00001bb0| 30 2c 20 70 20 3d 20 2a | 73 49 6e 66 6f 2c 20 71 |0, p = *|sInfo, q|
|00001bc0| 20 3d 20 2a 73 75 62 6a | 65 63 74 41 72 72 61 79 | = *subj|ectArray|
|00001bd0| 2c 20 72 20 3d 20 2a 73 | 49 6e 66 6f 50 74 72 73 |, r = *s|InfoPtrs|
|00001be0| 2c 20 63 61 6e 6f 6e 20 | 3d 20 2a 63 53 74 72 69 |, canon |= *cStri|
|00001bf0| 6e 67 73 3b 0d 09 09 69 | 20 3c 20 6e 75 6d 53 75 |ngs;...i| < numSu|
|00001c00| 62 6a 65 63 74 73 3b 0d | 09 09 69 2b 2b 2c 20 70 |bjects;.|..i++, p|
|00001c10| 2b 2b 2c 20 71 2b 2b 2c | 20 72 2b 2b 29 0d 09 7b |++, q++,| r++)..{|
|00001c20| 0d 09 09 70 2d 3e 63 61 | 6e 6f 6e 20 3d 20 63 61 |...p->ca|non = ca|
|00001c30| 6e 6f 6e 3b 0d 09 09 70 | 2d 3e 73 75 62 6a 65 63 |non;...p|->subjec|
|00001c40| 74 20 3d 20 71 3b 0d 09 | 09 70 2d 3e 69 6e 64 65 |t = q;..|.p->inde|
|00001c50| 78 20 3d 20 69 3b 0d 09 | 09 70 2d 3e 6e 75 6d 62 |x = i;..|.p->numb|
|00001c60| 65 72 20 3d 20 71 2d 3e | 6e 75 6d 62 65 72 3b 0d |er = q->|number;.|
|00001c70| 09 09 70 2d 3e 70 61 72 | 74 4e 75 6d 20 3d 20 70 |..p->par|tNum = p|
|00001c80| 2d 3e 6e 75 6d 50 61 72 | 74 73 20 3d 20 30 78 37 |->numPar|ts = 0x7|
|00001c90| 66 66 66 3b 0d 09 09 70 | 2d 3e 66 72 6f 6d 43 61 |fff;...p|->fromCa|
|00001ca0| 63 68 65 20 3d 20 71 2d | 3e 72 65 61 64 3b 0d 09 |che = q-|>read;..|
|00001cb0| 09 70 2d 3e 70 6f 74 65 | 6e 74 69 61 6c 50 61 72 |.p->pote|ntialPar|
|00001cc0| 74 20 3d 20 66 61 6c 73 | 65 3b 0d 09 09 2a 72 20 |t = fals|e;...*r |
|00001cd0| 3d 20 70 3b 0d 09 09 78 | 20 3d 20 2a 73 74 72 69 |= p;...x| = *stri|
|00001ce0| 6e 67 73 20 2b 20 71 2d | 3e 73 75 62 6a 65 63 74 |ngs + q-|>subject|
|00001cf0| 4f 66 66 73 65 74 3b 0d | 09 09 6c 65 6e 20 3d 20 |Offset;.|..len = |
|00001d00| 73 74 72 6c 65 6e 28 78 | 29 3b 0d 09 09 72 65 4c |strlen(x|);...reL|
|00001d10| 65 6e 20 3d 20 50 61 72 | 73 65 52 65 28 78 2c 20 |en = Par|seRe(x, |
|00001d20| 6c 65 6e 29 3b 0d 09 09 | 78 20 2b 3d 20 72 65 4c |len);...|x += reL|
|00001d30| 65 6e 3b 0d 09 09 77 68 | 69 6c 65 20 28 2a 78 20 |en;...wh|ile (*x |
|00001d40| 21 3d 20 30 29 20 7b 0d | 09 09 09 69 66 20 28 69 |!= 0) {.|...if (i|
|00001d50| 73 61 6c 6e 75 6d 28 2a | 78 29 20 7c 7c 20 2a 78 |salnum(*|x) || *x|
|00001d60| 20 3c 20 30 29 20 7b 0d | 09 09 09 09 2a 63 61 6e | < 0) {.|....*can|
|00001d70| 6f 6e 2b 2b 20 3d 20 74 | 6f 6c 6f 77 65 72 28 2a |on++ = t|olower(*|
|00001d80| 78 2b 2b 29 3b 0d 09 09 | 09 7d 20 65 6c 73 65 20 |x++);...|.} else |
|00001d90| 69 66 20 28 2a 78 20 3d | 3d 20 27 5b 27 20 7c 7c |if (*x =|= '[' |||
|00001da0| 20 2a 78 20 3d 3d 20 27 | 5d 27 20 7c 7c 20 2a 78 | *x == '|]' || *x|
|00001db0| 20 3d 3d 20 27 28 27 20 | 7c 7c 20 2a 78 20 3d 3d | == '(' ||| *x ==|
|00001dc0| 20 27 29 27 20 7c 7c 0d | 09 09 09 09 2a 78 20 3d | ')' ||.|....*x =|
|00001dd0| 3d 20 27 2f 27 20 7c 7c | 20 2a 78 20 3d 3d 20 27 |= '/' ||| *x == '|
|00001de0| 7c 27 20 7c 7c 20 2a 78 | 20 3d 3d 20 27 3a 27 29 ||' || *x| == ':')|
|00001df0| 20 7b 0d 09 09 09 09 2a | 63 61 6e 6f 6e 2b 2b 20 | {.....*|canon++ |
|00001e00| 3d 20 2a 78 2b 2b 3b 0d | 09 09 09 7d 20 65 6c 73 |= *x++;.|...} els|
|00001e10| 65 20 7b 0d 09 09 09 09 | 78 2b 2b 3b 0d 09 09 09 |e {.....|x++;....|
|00001e20| 7d 0d 09 09 7d 0d 09 09 | 2a 63 61 6e 6f 6e 2b 2b |}...}...|*canon++|
|00001e30| 20 3d 20 30 3b 0d 09 09 | 43 68 65 63 6b 46 6f 72 | = 0;...|CheckFor|
|00001e40| 50 61 72 74 49 6e 64 69 | 63 61 74 6f 72 28 70 29 |PartIndi|cator(p)|
|00001e50| 3b 0d 09 09 69 66 20 28 | 72 65 4c 65 6e 20 3e 20 |;...if (|reLen > |
|00001e60| 30 29 20 7b 0d 09 09 09 | 70 2d 3e 70 61 72 74 4e |0) {....|p->partN|
|00001e70| 75 6d 20 3d 20 70 2d 3e | 6e 75 6d 50 61 72 74 73 |um = p->|numParts|
|00001e80| 20 3d 20 30 78 37 66 66 | 66 3b 0d 09 09 09 70 2d | = 0x7ff|f;....p-|
|00001e90| 3e 70 6f 74 65 6e 74 69 | 61 6c 50 61 72 74 20 3d |>potenti|alPart =|
|00001ea0| 20 66 61 6c 73 65 3b 0d | 09 09 7d 0d 09 7d 0d 09 | false;.|..}..}..|
|00001eb0| 0d 09 2a 73 6f 72 74 49 | 6e 66 6f 20 3d 20 73 49 |..*sortI|nfo = sI|
|00001ec0| 6e 66 6f 3b 0d 09 2a 63 | 61 6e 6f 6e 69 63 61 6c |nfo;..*c|anonical|
|00001ed0| 53 74 72 69 6e 67 73 20 | 3d 20 63 53 74 72 69 6e |Strings |= cStrin|
|00001ee0| 67 73 3b 0d 09 2a 73 6f | 72 74 49 6e 66 6f 50 74 |gs;..*so|rtInfoPt|
|00001ef0| 72 73 20 3d 20 73 49 6e | 66 6f 50 74 72 73 3b 0d |rs = sIn|foPtrs;.|
|00001f00| 09 72 65 74 75 72 6e 20 | 6e 6f 45 72 72 3b 0d 09 |.return |noErr;..|
|00001f10| 0d 65 78 69 74 3a 0d 0d | 09 4d 79 44 69 73 70 6f |.exit:..|.MyDispo|
|00001f20| 73 65 48 61 6e 64 6c 65 | 28 73 49 6e 66 6f 29 3b |seHandle|(sInfo);|
|00001f30| 0d 09 4d 79 44 69 73 70 | 6f 73 65 48 61 6e 64 6c |..MyDisp|oseHandl|
|00001f40| 65 28 63 53 74 72 69 6e | 67 73 29 3b 0d 09 4d 79 |e(cStrin|gs);..My|
|00001f50| 44 69 73 70 6f 73 65 48 | 61 6e 64 6c 65 28 73 49 |DisposeH|andle(sI|
|00001f60| 6e 66 6f 50 74 72 73 29 | 3b 0d 09 72 65 74 75 72 |nfoPtrs)|;..retur|
|00001f70| 6e 20 65 72 72 3b 0d 7d | 0d 0d 0d 0d 2f 2a 2d 2d |n err;.}|..../*--|
|00001f80| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001f90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001fa0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001fb0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001fc0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 0d 09 53 6f 72 74 |--------|--..Sort|
|00001fd0| 53 75 62 6a 65 63 74 41 | 72 72 61 79 43 6f 6d 70 |SubjectA|rrayComp|
|00001fe0| 61 72 65 31 20 0d 09 0d | 09 54 68 69 73 20 69 73 |are1 ...|.This is|
|00001ff0| 20 74 68 65 20 63 6f 6d | 70 61 72 69 73 6f 6e 20 | the com|parison |
|00002000| 66 75 6e 63 74 69 6f 6e | 20 75 73 65 64 20 74 6f |function| used to|
|00002010| 20 73 6f 72 74 20 74 68 | 65 20 61 72 72 61 79 20 | sort th|e array |
|00002020| 6f 66 20 70 6f 69 6e 74 | 65 72 73 20 74 6f 20 0d |of point|ers to .|
|00002030| 09 54 53 6f 72 74 49 6e | 66 6f 20 72 65 63 6f 72 |.TSortIn|fo recor|
|00002040| 64 73 20 69 6e 74 6f 20 | 69 6e 63 72 65 61 73 69 |ds into |increasi|
|00002050| 6e 67 20 6f 72 64 65 72 | 20 62 79 20 63 61 6e 6f |ng order| by cano|
|00002060| 6e 69 63 61 6c 20 73 75 | 62 6a 65 63 74 2e 0d 09 |nical su|bject...|
|00002070| 0d 09 45 6e 74 72 79 3a | 09 70 20 3d 20 70 6f 69 |..Entry:|.p = poi|
|00002080| 6e 74 65 72 20 74 6f 20 | 70 6f 69 6e 74 65 72 20 |nter to |pointer |
|00002090| 74 6f 20 54 53 6f 72 74 | 49 6e 66 6f 20 72 65 63 |to TSort|Info rec|
|000020a0| 6f 72 64 2e 0d 09 09 09 | 71 20 3d 20 70 6f 69 6e |ord.....|q = poin|
|000020b0| 74 65 72 20 74 6f 20 70 | 6f 69 6e 74 65 72 20 74 |ter to p|ointer t|
|000020c0| 6f 20 54 53 6f 72 74 49 | 6e 66 6f 20 72 65 63 6f |o TSortI|nfo reco|
|000020d0| 72 64 2e 0d 09 09 09 0d | 09 45 78 69 74 3a 09 66 |rd......|.Exit:.f|
|000020e0| 75 6e 63 74 69 6f 6e 20 | 72 65 73 75 6c 74 20 3d |unction |result =|
|000020f0| 20 65 72 72 6f 72 20 63 | 6f 64 65 2e 0d 09 09 09 | error c|ode.....|
|00002100| 2a 72 65 73 75 6c 74 0d | 09 09 09 09 3c 20 30 20 |*result.|....< 0 |
|00002110| 69 66 20 66 69 72 73 74 | 20 73 75 62 6a 65 63 74 |if first| subject|
|00002120| 20 3c 20 73 65 63 6f 6e | 64 20 73 75 62 6a 65 63 | < secon|d subjec|
|00002130| 74 2e 0d 09 09 09 09 3d | 20 30 20 69 66 20 66 69 |t......=| 0 if fi|
|00002140| 72 73 74 20 73 75 62 6a | 65 63 74 20 3d 3d 20 73 |rst subj|ect == s|
|00002150| 65 63 6f 6e 64 20 73 75 | 62 6a 65 63 74 2e 0d 09 |econd su|bject...|
|00002160| 09 09 09 3e 20 30 20 69 | 66 20 66 69 72 73 74 20 |...> 0 i|f first |
|00002170| 73 75 62 6a 65 63 74 20 | 3e 20 73 65 63 6f 6e 64 |subject |> second|
|00002180| 20 73 75 62 6a 65 63 74 | 2e 0d 09 09 09 09 0d 09 | subject|........|
|00002190| 54 68 65 20 70 72 69 6d | 61 72 79 20 73 6f 72 74 |The prim|ary sort|
|000021a0| 20 6b 65 79 20 69 73 20 | 74 68 65 20 63 61 6e 6f | key is |the cano|
|000021b0| 6e 69 63 61 6c 20 73 75 | 62 6a 65 63 74 2e 0d 09 |nical su|bject...|
|000021c0| 0d 09 54 68 65 20 73 65 | 63 6f 6e 64 61 72 79 20 |..The se|condary |
|000021d0| 73 6f 72 74 20 6b 65 79 | 20 69 73 20 74 68 65 20 |sort key| is the |
|000021e0| 70 61 72 74 20 6e 75 6d | 62 65 72 2e 0d 09 0d 09 |part num|ber.....|
|000021f0| 54 68 65 20 74 65 72 74 | 69 61 72 79 20 73 6f 72 |The tert|iary sor|
|00002200| 74 20 6b 65 79 20 69 73 | 20 74 68 65 20 61 72 74 |t key is| the art|
|00002210| 69 63 6c 65 20 6e 75 6d | 62 65 72 2e 0d 2d 2d 2d |icle num|ber..---|
|00002220| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002230| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002240| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002250| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002260| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2a 2f 0d 0d 73 74 61 |--------|-*/..sta|
|00002270| 74 69 63 20 4f 53 45 72 | 72 20 53 6f 72 74 53 75 |tic OSEr|r SortSu|
|00002280| 62 6a 65 63 74 41 72 72 | 61 79 43 6f 6d 70 61 72 |bjectArr|ayCompar|
|00002290| 65 31 20 28 54 53 6f 72 | 74 49 6e 66 6f 20 2a 2a |e1 (TSor|tInfo **|
|000022a0| 70 2c 20 54 53 6f 72 74 | 49 6e 66 6f 20 2a 2a 71 |p, TSort|Info **q|
|000022b0| 2c 20 73 68 6f 72 74 20 | 2a 72 65 73 75 6c 74 29 |, short |*result)|
|000022c0| 0d 7b 0d 09 4f 53 45 72 | 72 20 65 72 72 3b 0d 09 |.{..OSEr|r err;..|
|000022d0| 73 74 61 74 69 63 20 73 | 68 6f 72 74 20 63 6f 75 |static s|hort cou|
|000022e0| 6e 74 65 72 20 3d 20 30 | 3b 0d 09 73 68 6f 72 74 |nter = 0|;..short|
|000022f0| 20 72 3b 0d 0d 09 69 66 | 20 28 28 2b 2b 63 6f 75 | r;...if| ((++cou|
|00002300| 6e 74 65 72 20 26 20 30 | 78 31 66 29 20 3d 3d 20 |nter & 0|x1f) == |
|00002310| 30 29 20 7b 0d 09 09 65 | 72 72 20 3d 20 47 69 76 |0) {...e|rr = Giv|
|00002320| 65 54 69 6d 65 28 66 61 | 6c 73 65 29 3b 0d 09 09 |eTime(fa|lse);...|
|00002330| 69 66 20 28 65 72 72 20 | 21 3d 20 6e 6f 45 72 72 |if (err |!= noErr|
|00002340| 29 20 72 65 74 75 72 6e | 20 65 72 72 3b 0d 09 09 |) return| err;...|
|00002350| 63 6f 75 6e 74 65 72 20 | 3d 20 30 3b 0d 09 7d 0d |counter |= 0;..}.|
|00002360| 09 0d 09 72 20 3d 20 73 | 74 72 63 6d 70 28 28 2a |...r = s|trcmp((*|
|00002370| 2a 70 29 2e 63 61 6e 6f | 6e 2c 20 28 2a 2a 71 29 |*p).cano|n, (**q)|
|00002380| 2e 63 61 6e 6f 6e 29 3b | 0d 09 69 66 20 28 72 20 |.canon);|..if (r |
|00002390| 21 3d 20 30 20 29 20 7b | 0d 09 09 2a 72 65 73 75 |!= 0 ) {|...*resu|
|000023a0| 6c 74 20 3d 20 72 3b 0d | 09 7d 20 65 6c 73 65 20 |lt = r;.|.} else |
|000023b0| 7b 0d 09 09 72 20 3d 20 | 28 2a 2a 70 29 2e 70 61 |{...r = |(**p).pa|
|000023c0| 72 74 4e 75 6d 20 2d 20 | 28 2a 2a 71 29 2e 70 61 |rtNum - |(**q).pa|
|000023d0| 72 74 4e 75 6d 3b 0d 09 | 09 69 66 20 28 72 20 21 |rtNum;..|.if (r !|
|000023e0| 3d 20 30 29 20 7b 0d 09 | 09 09 2a 72 65 73 75 6c |= 0) {..|..*resul|
|000023f0| 74 20 3d 20 72 3b 0d 09 | 09 7d 20 65 6c 73 65 20 |t = r;..|.} else |
|00002400| 7b 0d 09 09 09 2a 72 65 | 73 75 6c 74 20 3d 20 28 |{....*re|sult = (|
|00002410| 2a 2a 70 29 2e 6e 75 6d | 62 65 72 20 3c 20 28 2a |**p).num|ber < (*|
|00002420| 2a 71 29 2e 6e 75 6d 62 | 65 72 20 3f 20 2d 31 20 |*q).numb|er ? -1 |
|00002430| 3a 20 2b 31 3b 0d 09 09 | 7d 0d 09 7d 0d 09 72 65 |: +1;...|}..}..re|
|00002440| 74 75 72 6e 20 6e 6f 45 | 72 72 3b 0d 7d 0d 0d 0d |turn noE|rr;.}...|
|00002450| 0d 2f 2a 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |./*-----|--------|
|00002460| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002470| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002480| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002490| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 0d |--------|-------.|
|000024a0| 09 53 6f 72 74 53 75 62 | 6a 65 63 74 41 72 72 61 |.SortSub|jectArra|
|000024b0| 79 43 6f 6d 70 61 72 65 | 32 20 0d 09 0d 09 54 68 |yCompare|2 ....Th|
|000024c0| 69 73 20 69 73 20 74 68 | 65 20 63 6f 6d 70 61 72 |is is th|e compar|
|000024d0| 69 73 6f 6e 20 66 75 6e | 63 74 69 6f 6e 20 75 73 |ison fun|ction us|
|000024e0| 65 64 20 74 6f 20 73 6f | 72 74 20 74 68 65 20 61 |ed to so|rt the a|
|000024f0| 72 72 61 79 20 6f 66 20 | 70 6f 69 6e 74 65 72 73 |rray of |pointers|
|00002500| 20 74 6f 20 0d 09 54 53 | 6f 72 74 49 6e 66 6f 20 | to ..TS|ortInfo |
|00002510| 72 65 63 6f 72 64 73 20 | 69 6e 74 6f 20 66 69 6e |records |into fin|
|00002520| 61 6c 20 74 68 72 65 61 | 64 20 6f 72 64 65 72 2e |al threa|d order.|
|00002530| 0d 09 0d 09 45 6e 74 72 | 79 3a 09 70 20 3d 20 70 |....Entr|y:.p = p|
|00002540| 6f 69 6e 74 65 72 20 74 | 6f 20 70 6f 69 6e 74 65 |ointer t|o pointe|
|00002550| 72 20 74 6f 20 54 53 6f | 72 74 49 6e 66 6f 20 72 |r to TSo|rtInfo r|
|00002560| 65 63 6f 72 64 2e 0d 09 | 09 09 71 20 3d 20 70 6f |ecord...|..q = po|
|00002570| 69 6e 74 65 72 20 74 6f | 20 70 6f 69 6e 74 65 72 |inter to| pointer|
|00002580| 20 74 6f 20 54 53 6f 72 | 74 49 6e 66 6f 20 72 65 | to TSor|tInfo re|
|00002590| 63 6f 72 64 2e 0d 09 09 | 09 0d 09 45 78 69 74 3a |cord....|...Exit:|
|000025a0| 09 66 75 6e 63 74 69 6f | 6e 20 72 65 73 75 6c 74 |.functio|n result|
|000025b0| 20 3d 20 65 72 72 6f 72 | 20 63 6f 64 65 2e 0d 09 | = error| code...|
|000025c0| 09 09 2a 72 65 73 75 6c | 74 0d 09 09 09 09 3c 20 |..*resul|t.....< |
|000025d0| 30 20 69 66 20 66 69 72 | 73 74 20 73 75 62 6a 65 |0 if fir|st subje|
|000025e0| 63 74 20 3c 20 73 65 63 | 6f 6e 64 20 73 75 62 6a |ct < sec|ond subj|
|000025f0| 65 63 74 2e 0d 09 09 09 | 09 3d 20 30 20 69 66 20 |ect.....|.= 0 if |
|00002600| 66 69 72 73 74 20 73 75 | 62 6a 65 63 74 20 3d 3d |first su|bject ==|
|00002610| 20 73 65 63 6f 6e 64 20 | 73 75 62 6a 65 63 74 2e | second |subject.|
|00002620| 0d 09 09 09 09 3e 20 30 | 20 69 66 20 66 69 72 73 |.....> 0| if firs|
|00002630| 74 20 73 75 62 6a 65 63 | 74 20 3e 20 73 65 63 6f |t subjec|t > seco|
|00002640| 6e 64 20 73 75 62 6a 65 | 63 74 2e 0d 09 09 09 09 |nd subje|ct......|
|00002650| 0d 09 54 68 65 20 70 72 | 69 6d 61 72 79 20 73 6f |..The pr|imary so|
|00002660| 72 74 20 6b 65 79 20 69 | 73 20 74 68 65 20 74 68 |rt key i|s the th|
|00002670| 72 65 61 64 20 68 65 61 | 64 20 61 72 74 69 63 6c |read hea|d articl|
|00002680| 65 20 6e 75 6d 62 65 72 | 2e 0d 09 0d 09 54 68 65 |e number|.....The|
|00002690| 20 73 65 63 6f 6e 64 61 | 72 79 20 73 6f 72 74 20 | seconda|ry sort |
|000026a0| 6b 65 79 20 69 73 20 74 | 68 65 20 74 68 72 65 61 |key is t|he threa|
|000026b0| 64 20 6f 72 64 69 6e 61 | 6c 2e 0d 2d 2d 2d 2d 2d |d ordina|l..-----|
|000026c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000026d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000026e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000026f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002700| 2d 2d 2d 2d 2d 2d 2d 2a | 2f 0d 0d 73 74 61 74 69 |-------*|/..stati|
|00002710| 63 20 4f 53 45 72 72 20 | 53 6f 72 74 53 75 62 6a |c OSErr |SortSubj|
|00002720| 65 63 74 41 72 72 61 79 | 43 6f 6d 70 61 72 65 32 |ectArray|Compare2|
|00002730| 20 28 54 53 6f 72 74 49 | 6e 66 6f 20 2a 2a 70 2c | (TSortI|nfo **p,|
|00002740| 20 54 53 6f 72 74 49 6e | 66 6f 20 2a 2a 71 2c 20 | TSortIn|fo **q, |
|00002750| 73 68 6f 72 74 20 2a 72 | 65 73 75 6c 74 29 0d 7b |short *r|esult).{|
|00002760| 0d 09 4f 53 45 72 72 20 | 65 72 72 3b 0d 09 73 74 |..OSErr |err;..st|
|00002770| 61 74 69 63 20 73 68 6f | 72 74 20 63 6f 75 6e 74 |atic sho|rt count|
|00002780| 65 72 20 3d 20 30 3b 0d | 0d 09 69 66 20 28 28 2b |er = 0;.|..if ((+|
|00002790| 2b 63 6f 75 6e 74 65 72 | 20 26 20 30 78 31 66 29 |+counter| & 0x1f)|
|000027a0| 20 3d 3d 20 30 29 20 7b | 0d 09 09 65 72 72 20 3d | == 0) {|...err =|
|000027b0| 20 47 69 76 65 54 69 6d | 65 28 66 61 6c 73 65 29 | GiveTim|e(false)|
|000027c0| 3b 0d 09 09 69 66 20 28 | 65 72 72 20 21 3d 20 6e |;...if (|err != n|
|000027d0| 6f 45 72 72 29 20 72 65 | 74 75 72 6e 20 65 72 72 |oErr) re|turn err|
|000027e0| 3b 0d 09 09 63 6f 75 6e | 74 65 72 20 3d 20 30 3b |;...coun|ter = 0;|
|000027f0| 0d 09 7d 0d 09 0d 09 69 | 66 20 28 28 2a 2a 70 29 |..}....i|f ((**p)|
|00002800| 2e 74 68 72 65 61 64 48 | 65 61 64 4e 75 6d 62 65 |.threadH|eadNumbe|
|00002810| 72 20 3d 3d 20 28 2a 2a | 71 29 2e 74 68 72 65 61 |r == (**|q).threa|
|00002820| 64 48 65 61 64 4e 75 6d | 62 65 72 29 20 7b 0d 09 |dHeadNum|ber) {..|
|00002830| 09 2a 72 65 73 75 6c 74 | 20 3d 20 28 2a 2a 70 29 |.*result| = (**p)|
|00002840| 2e 74 68 72 65 61 64 4f | 72 64 69 6e 61 6c 20 2d |.threadO|rdinal -|
|00002850| 20 28 2a 2a 71 29 2e 74 | 68 72 65 61 64 4f 72 64 | (**q).t|hreadOrd|
|00002860| 69 6e 61 6c 3b 0d 09 7d | 20 65 6c 73 65 20 7b 0d |inal;..}| else {.|
|00002870| 09 09 2a 72 65 73 75 6c | 74 20 3d 20 28 2a 2a 70 |..*resul|t = (**p|
|00002880| 29 2e 74 68 72 65 61 64 | 48 65 61 64 4e 75 6d 62 |).thread|HeadNumb|
|00002890| 65 72 20 3c 20 28 2a 2a | 71 29 2e 74 68 72 65 61 |er < (**|q).threa|
|000028a0| 64 48 65 61 64 4e 75 6d | 62 65 72 20 3f 20 2d 31 |dHeadNum|ber ? -1|
|000028b0| 20 3a 20 2b 31 3b 0d 09 | 7d 0d 09 72 65 74 75 72 | : +1;..|}..retur|
|000028c0| 6e 20 6e 6f 45 72 72 3b | 09 0d 7d 0d 0d 0d 0d 2f |n noErr;|..}..../|
|000028d0| 2a 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |*-------|--------|
|000028e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000028f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002900| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002910| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 0d 09 50 |--------|-----..P|
|00002920| 72 6f 63 65 73 73 54 68 | 72 65 61 64 20 0d 09 0d |rocessTh|read ...|
|00002930| 09 50 72 6f 63 65 73 73 | 20 61 20 74 68 72 65 61 |.Process| a threa|
|00002940| 64 2e 0d 09 0d 09 45 6e | 74 72 79 3a 09 74 68 72 |d.....En|try:.thr|
|00002950| 65 61 64 48 65 61 64 50 | 74 72 20 3d 20 70 6f 69 |eadHeadP|tr = poi|
|00002960| 6e 74 65 72 20 74 6f 20 | 66 69 72 73 74 20 65 6c |nter to |first el|
|00002970| 65 6d 65 6e 74 20 6f 66 | 20 54 53 6f 72 74 49 6e |ement of| TSortIn|
|00002980| 66 6f 20 61 72 72 61 79 | 0d 09 09 09 09 66 6f 72 |fo array|.....for|
|00002990| 20 74 68 72 65 61 64 2e | 0d 09 09 09 74 68 72 65 | thread.|....thre|
|000029a0| 61 64 45 6e 64 50 74 72 | 20 3d 20 70 6f 69 6e 74 |adEndPtr| = point|
|000029b0| 65 72 20 74 6f 20 65 6c | 65 6d 65 6e 74 20 66 6f |er to el|ement fo|
|000029c0| 6c 6c 6f 77 69 6e 67 20 | 6c 61 73 74 20 65 6c 65 |llowing |last ele|
|000029d0| 6d 65 6e 74 20 6f 66 0d | 09 09 09 09 54 53 6f 72 |ment of.|....TSor|
|000029e0| 74 49 6e 66 6f 20 61 72 | 72 61 79 20 66 6f 72 20 |tInfo ar|ray for |
|000029f0| 74 68 72 65 61 64 2e 0d | 09 09 09 0d 09 45 78 69 |thread..|.....Exi|
|00002a00| 74 3a 09 66 75 6e 63 74 | 69 6f 6e 20 72 65 73 75 |t:.funct|ion resu|
|00002a10| 6c 74 20 3d 20 65 72 72 | 6f 72 20 63 6f 64 65 2e |lt = err|or code.|
|00002a20| 0d 09 09 09 0d 09 4f 6e | 20 65 6e 74 72 79 2c 20 |......On| entry, |
|00002a30| 74 68 65 20 22 66 72 6f | 6d 43 61 63 68 65 22 20 |the "fro|mCache" |
|00002a40| 66 69 65 6c 64 20 6f 66 | 20 65 61 63 68 20 54 53 |field of| each TS|
|00002a50| 6f 72 74 49 6e 66 6f 20 | 72 65 63 6f 72 64 20 69 |ortInfo |record i|
|00002a60| 73 20 74 72 75 65 20 69 | 66 20 74 68 65 20 0d 09 |s true i|f the ..|
|00002a70| 61 72 74 69 63 6c 65 20 | 63 61 6d 65 20 66 72 6f |article |came fro|
|00002a80| 6d 20 74 68 65 20 70 61 | 72 74 73 20 63 61 63 68 |m the pa|rts cach|
|00002a90| 65 2c 20 66 61 6c 73 65 | 20 69 66 20 74 68 65 20 |e, false| if the |
|00002aa0| 61 72 74 69 63 6c 65 20 | 77 61 73 20 72 65 61 64 |article |was read|
|00002ab0| 0d 09 66 72 6f 6d 20 74 | 68 65 20 6e 65 74 2e 0d |..from t|he net..|
|00002ac0| 09 0d 09 4f 6e 20 65 78 | 69 74 2c 20 74 68 65 20 |...On ex|it, the |
|00002ad0| 66 6f 6c 6c 6f 77 69 6e | 67 20 66 69 65 6c 64 73 |followin|g fields|
|00002ae0| 20 61 72 65 20 73 65 74 | 20 69 6e 20 65 61 63 68 | are set| in each|
|00002af0| 20 54 53 75 62 6a 65 63 | 74 20 72 65 63 6f 72 64 | TSubjec|t record|
|00002b00| 3a 0d 0d 09 09 74 68 72 | 65 61 64 48 65 61 64 49 |:....thr|eadHeadI|
|00002b10| 6e 64 65 78 20 3d 20 69 | 6e 64 65 78 20 69 6e 20 |ndex = i|ndex in |
|00002b20| 73 75 62 6a 65 63 74 20 | 61 72 72 61 79 20 6f 66 |subject |array of|
|00002b30| 20 74 68 72 65 61 64 20 | 68 65 61 64 2e 0d 09 09 | thread |head....|
|00002b40| 74 68 72 65 61 64 4f 72 | 64 69 6e 61 6c 20 3d 20 |threadOr|dinal = |
|00002b50| 61 72 74 69 63 6c 65 20 | 6f 72 64 69 6e 61 6c 20 |article |ordinal |
|00002b60| 77 69 74 68 69 6e 20 74 | 68 72 65 61 64 20 28 31 |within t|hread (1|
|00002b70| 2c 32 2c 33 2c 2e 2e 2e | 29 2e 09 0d 09 09 74 68 |,2,3,...|).....th|
|00002b80| 72 65 61 64 4c 65 6e 67 | 74 68 20 3d 20 6c 65 6e |readLeng|th = len|
|00002b90| 67 74 68 20 6f 66 20 74 | 68 72 65 61 64 2e 0d 09 |gth of t|hread...|
|00002ba0| 09 6e 65 78 74 49 6e 54 | 68 72 65 61 64 20 3d 20 |.nextInT|hread = |
|00002bb0| 69 6e 64 65 78 20 69 6e | 20 73 75 62 6a 65 63 74 |index in| subject|
|00002bc0| 20 61 72 72 61 79 20 6f | 66 20 6e 65 78 74 20 61 | array o|f next a|
|00002bd0| 72 74 69 63 6c 65 20 69 | 6e 20 74 68 72 65 61 64 |rticle i|n thread|
|00002be0| 2c 0d 09 09 09 6f 72 20 | 2d 31 20 69 66 20 6c 61 |,....or |-1 if la|
|00002bf0| 73 74 20 61 72 74 69 63 | 6c 65 20 69 6e 20 74 68 |st artic|le in th|
|00002c00| 72 65 61 64 2e 20 0d 09 | 09 70 61 72 74 4e 75 6d |read. ..|.partNum|
|00002c10| 20 3d 20 70 61 72 74 20 | 6e 75 6d 62 65 72 2c 20 | = part |number, |
|00002c20| 6f 72 20 30 78 37 66 66 | 66 20 69 66 20 6e 6f 74 |or 0x7ff|f if not|
|00002c30| 20 61 20 70 61 72 74 2e | 0d 09 09 6e 75 6d 50 61 | a part.|...numPa|
|00002c40| 72 74 73 20 3d 20 6e 75 | 6d 62 65 72 20 6f 66 20 |rts = nu|mber of |
|00002c50| 70 61 72 74 73 2c 20 6f | 72 20 30 78 37 66 66 66 |parts, o|r 0x7fff|
|00002c60| 20 69 66 20 6e 6f 74 20 | 61 20 70 61 72 74 2e 0d | if not |a part..|
|00002c70| 09 09 72 65 61 64 20 3d | 20 66 61 6c 73 65 0d 09 |..read =| false..|
|00002c80| 09 69 6e 63 6f 6d 70 6c | 65 74 65 20 3d 20 74 72 |.incompl|ete = tr|
|00002c90| 75 65 20 69 66 20 61 72 | 74 69 63 6c 65 20 69 73 |ue if ar|ticle is|
|00002ca0| 20 70 61 72 74 20 6f 66 | 20 61 6e 20 69 6e 63 6f | part of| an inco|
|00002cb0| 6d 70 6c 65 74 65 20 6d | 75 6c 74 69 70 6c 65 0d |mplete m|ultiple.|
|00002cc0| 09 09 09 70 61 72 74 20 | 74 68 72 65 61 64 2e 09 |...part |thread..|
|00002cd0| 09 0d 09 09 69 6e 4c 69 | 73 74 20 3d 20 74 72 75 |....inLi|st = tru|
|00002ce0| 65 20 69 66 20 61 72 74 | 69 63 6c 65 20 73 68 6f |e if art|icle sho|
|00002cf0| 75 6c 64 20 62 65 20 69 | 6e 63 6c 75 64 65 64 20 |uld be i|ncluded |
|00002d00| 69 6e 20 6c 69 73 74 20 | 64 69 73 70 6c 61 79 65 |in list |displaye|
|00002d10| 64 0d 09 09 09 74 6f 20 | 75 73 65 72 20 28 74 68 |d....to |user (th|
|00002d20| 72 65 61 64 20 63 6f 6e | 74 61 69 6e 73 20 61 74 |read con|tains at|
|00002d30| 20 6c 65 61 73 74 20 6f | 6e 65 20 75 6e 72 65 61 | least o|ne unrea|
|00002d40| 64 20 61 72 74 69 63 6c | 65 29 2e 0d 09 09 09 0d |d articl|e)......|
|00002d50| 09 4f 6e 20 65 78 69 74 | 2c 20 74 68 65 20 66 6f |.On exit|, the fo|
|00002d60| 6c 6c 6f 77 69 6e 67 20 | 66 69 65 6c 64 73 20 61 |llowing |fields a|
|00002d70| 72 65 20 73 65 74 20 69 | 6e 20 65 61 63 68 20 54 |re set i|n each T|
|00002d80| 53 6f 72 74 49 6e 66 6f | 20 72 65 63 6f 72 64 3a |SortInfo| record:|
|00002d90| 0d 09 09 0d 09 09 74 68 | 72 65 61 64 48 65 61 64 |......th|readHead|
|00002da0| 4e 75 6d 62 65 72 20 3d | 20 61 72 74 69 63 6c 65 |Number =| article|
|00002db0| 20 6e 75 6d 62 65 72 20 | 6f 66 20 66 69 72 73 74 | number |of first|
|00002dc0| 20 61 72 74 69 63 6c 65 | 20 69 6e 20 74 68 72 65 | article| in thre|
|00002dd0| 61 64 2e 0d 09 09 74 68 | 72 65 61 64 4f 72 64 69 |ad....th|readOrdi|
|00002de0| 6e 61 6c 20 3d 20 61 72 | 74 69 63 6c 65 20 6f 72 |nal = ar|ticle or|
|00002df0| 64 69 6e 61 6c 20 77 69 | 74 68 69 6e 20 74 68 72 |dinal wi|thin thr|
|00002e00| 65 61 64 20 28 31 2c 32 | 2c 33 2c 2e 2e 2e 29 2e |ead (1,2|,3,...).|
|00002e10| 0d 09 09 0d 09 4f 6e 20 | 65 78 69 74 2c 20 74 68 |.....On |exit, th|
|00002e20| 65 20 66 6f 6c 6c 6f 77 | 69 6e 67 20 66 69 65 6c |e follow|ing fiel|
|00002e30| 64 73 20 69 6e 20 74 68 | 65 20 54 53 6f 72 74 49 |ds in th|e TSortI|
|00002e40| 6e 66 6f 20 72 65 63 6f | 72 64 73 20 6d 61 79 20 |nfo reco|rds may |
|00002e50| 62 65 0d 09 61 64 6a 75 | 73 74 65 64 3a 0d 09 0d |be..adju|sted:...|
|00002e60| 09 09 70 61 72 74 4e 75 | 6d 20 3d 20 70 61 72 74 |..partNu|m = part|
|00002e70| 20 6e 75 6d 62 65 72 2c | 20 6f 72 20 30 78 37 66 | number,| or 0x7f|
|00002e80| 66 66 20 69 66 20 6e 6f | 74 20 61 20 70 61 72 74 |ff if no|t a part|
|00002e90| 2e 0d 09 09 6e 75 6d 50 | 61 72 74 73 20 3d 20 6e |....numP|arts = n|
|00002ea0| 75 6d 62 65 72 20 6f 66 | 20 70 61 72 74 73 2c 20 |umber of| parts, |
|00002eb0| 30 72 20 30 78 37 66 66 | 66 20 69 66 20 6e 6f 74 |0r 0x7ff|f if not|
|00002ec0| 20 61 20 70 61 72 74 2e | 0d 2d 2d 2d 2d 2d 2d 2d | a part.|.-------|
|00002ed0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002ee0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002ef0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002f00| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002f10| 2d 2d 2d 2d 2d 2a 2f 0d | 0d 73 74 61 74 69 63 20 |-----*/.|.static |
|00002f20| 4f 53 45 72 72 20 50 72 | 6f 63 65 73 73 54 68 72 |OSErr Pr|ocessThr|
|00002f30| 65 61 64 20 28 54 53 6f | 72 74 49 6e 66 6f 20 2a |ead (TSo|rtInfo *|
|00002f40| 2a 74 68 72 65 61 64 48 | 65 61 64 50 74 72 2c 20 |*threadH|eadPtr, |
|00002f50| 54 53 6f 72 74 49 6e 66 | 6f 20 2a 2a 74 68 72 65 |TSortInf|o **thre|
|00002f60| 61 64 45 6e 64 50 74 72 | 29 0d 7b 0d 09 54 53 6f |adEndPtr|).{..TSo|
|00002f70| 72 74 49 6e 66 6f 20 2a | 2a 73 2c 20 2a 78 3b 0d |rtInfo *|*s, *x;.|
|00002f80| 09 54 53 75 62 6a 65 63 | 74 20 2a 71 2c 20 2a 70 |.TSubjec|t *q, *p|
|00002f90| 72 65 76 49 6e 4c 69 73 | 74 3b 0d 09 73 68 6f 72 |revInLis|t;..shor|
|00002fa0| 74 20 74 68 72 65 61 64 | 4c 65 6e 67 74 68 2c 20 |t thread|Length, |
|00002fb0| 74 68 72 65 61 64 48 65 | 61 64 4e 75 6d 62 65 72 |threadHe|adNumber|
|00002fc0| 2c 20 74 68 72 65 61 64 | 48 65 61 64 49 6e 64 65 |, thread|HeadInde|
|00002fd0| 78 2c 20 74 68 72 65 61 | 64 4f 72 64 69 6e 61 6c |x, threa|dOrdinal|
|00002fe0| 3b 0d 09 73 68 6f 72 74 | 20 6e 75 6d 50 61 72 74 |;..short| numPart|
|00002ff0| 73 2c 20 6c 61 73 74 50 | 61 72 74 2c 20 6e 75 6d |s, lastP|art, num|
|00003000| 41 72 74 73 57 68 69 63 | 68 41 72 65 50 61 72 74 |ArtsWhic|hArePart|
|00003010| 73 3b 0d 09 42 6f 6f 6c | 65 61 6e 20 69 6e 4c 69 |s;..Bool|ean inLi|
|00003020| 73 74 2c 20 69 6e 63 6f | 6d 70 6c 65 74 65 2c 20 |st, inco|mplete, |
|00003030| 68 61 76 65 4e 6f 6e 50 | 6f 74 65 6e 74 69 61 6c |haveNonP|otential|
|00003040| 50 61 72 74 2c 20 63 61 | 63 68 65 50 61 72 74 73 |Part, ca|cheParts|
|00003050| 3b 0d 09 42 6f 6f 6c 65 | 61 6e 20 68 61 76 65 4e |;..Boole|an haveN|
|00003060| 65 77 50 61 72 74 2c 20 | 63 6f 6d 70 6c 65 74 65 |ewPart, |complete|
|00003070| 2c 20 68 61 76 65 4f 6c | 64 50 61 72 74 3b 0d 09 |, haveOl|dPart;..|
|00003080| 43 53 74 72 32 35 35 20 | 73 75 62 6a 65 63 74 2c |CStr255 |subject,|
|00003090| 20 61 75 74 68 6f 72 3b | 0d 09 4f 53 45 72 72 20 | author;|..OSErr |
|000030a0| 65 72 72 20 3d 20 6e 6f | 45 72 72 3b 0d 09 0d 09 |err = no|Err;....|
|000030b0| 6e 75 6d 50 61 72 74 73 | 20 3d 20 30 3b 0d 09 68 |numParts| = 0;..h|
|000030c0| 61 76 65 4e 65 77 50 61 | 72 74 20 3d 20 66 61 6c |aveNewPa|rt = fal|
|000030d0| 73 65 3b 0d 09 68 61 76 | 65 4f 6c 64 50 61 72 74 |se;..hav|eOldPart|
|000030e0| 20 3d 20 66 61 6c 73 65 | 3b 0d 09 6e 75 6d 41 72 | = false|;..numAr|
|000030f0| 74 73 57 68 69 63 68 41 | 72 65 50 61 72 74 73 20 |tsWhichA|reParts |
|00003100| 3d 20 30 3b 0d 09 68 61 | 76 65 4e 6f 6e 50 6f 74 |= 0;..ha|veNonPot|
|00003110| 65 6e 74 69 61 6c 50 61 | 72 74 20 3d 20 66 61 6c |entialPa|rt = fal|
|00003120| 73 65 3b 0d 09 66 6f 72 | 20 28 73 20 3d 20 74 68 |se;..for| (s = th|
|00003130| 72 65 61 64 48 65 61 64 | 50 74 72 3b 20 73 20 3c |readHead|Ptr; s <|
|00003140| 20 74 68 72 65 61 64 45 | 6e 64 50 74 72 3b 20 73 | threadE|ndPtr; s|
|00003150| 2b 2b 29 20 7b 0d 09 09 | 78 20 3d 20 2a 73 3b 0d |++) {...|x = *s;.|
|00003160| 09 09 69 66 20 28 78 2d | 3e 66 72 6f 6d 43 61 63 |..if (x-|>fromCac|
|00003170| 68 65 20 26 26 20 78 2d | 3e 6e 75 6d 50 61 72 74 |he && x-|>numPart|
|00003180| 73 20 3c 20 30 78 37 66 | 66 66 29 20 68 61 76 65 |s < 0x7f|ff) have|
|00003190| 4f 6c 64 50 61 72 74 20 | 3d 20 74 72 75 65 3b 0d |OldPart |= true;.|
|000031a0| 09 09 69 66 20 28 21 78 | 2d 3e 66 72 6f 6d 43 61 |..if (!x|->fromCa|
|000031b0| 63 68 65 20 26 26 20 78 | 2d 3e 6e 75 6d 50 61 72 |che && x|->numPar|
|000031c0| 74 73 20 3c 20 30 78 37 | 66 66 66 29 20 68 61 76 |ts < 0x7|fff) hav|
|000031d0| 65 4e 65 77 50 61 72 74 | 20 3d 20 74 72 75 65 3b |eNewPart| = true;|
|000031e0| 0d 09 09 69 66 20 28 78 | 2d 3e 6e 75 6d 50 61 72 |...if (x|->numPar|
|000031f0| 74 73 20 3c 20 30 78 37 | 66 66 66 29 20 7b 0d 09 |ts < 0x7|fff) {..|
|00003200| 09 09 69 66 20 28 78 2d | 3e 6e 75 6d 50 61 72 74 |..if (x-|>numPart|
|00003210| 73 20 3e 20 6e 75 6d 50 | 61 72 74 73 29 20 6e 75 |s > numP|arts) nu|
|00003220| 6d 50 61 72 74 73 20 3d | 20 78 2d 3e 6e 75 6d 50 |mParts =| x->numP|
|00003230| 61 72 74 73 3b 0d 09 09 | 09 6e 75 6d 41 72 74 73 |arts;...|.numArts|
|00003240| 57 68 69 63 68 41 72 65 | 50 61 72 74 73 2b 2b 3b |WhichAre|Parts++;|
|00003250| 0d 09 09 09 69 66 20 28 | 21 78 2d 3e 70 6f 74 65 |....if (|!x->pote|
|00003260| 6e 74 69 61 6c 50 61 72 | 74 29 20 68 61 76 65 4e |ntialPar|t) haveN|
|00003270| 6f 6e 50 6f 74 65 6e 74 | 69 61 6c 50 61 72 74 20 |onPotent|ialPart |
|00003280| 3d 20 74 72 75 65 3b 0d | 09 09 7d 0d 09 7d 0d 09 |= true;.|..}..}..|
|00003290| 0d 09 69 66 20 28 6e 75 | 6d 41 72 74 73 57 68 69 |..if (nu|mArtsWhi|
|000032a0| 63 68 41 72 65 50 61 72 | 74 73 20 3d 3d 20 30 29 |chArePar|ts == 0)|
|000032b0| 20 7b 0d 09 09 69 6e 63 | 6f 6d 70 6c 65 74 65 20 | {...inc|omplete |
|000032c0| 3d 20 66 61 6c 73 65 3b | 0d 09 09 63 61 63 68 65 |= false;|...cache|
|000032d0| 50 61 72 74 73 20 3d 20 | 66 61 6c 73 65 3b 0d 09 |Parts = |false;..|
|000032e0| 09 63 6f 6d 70 6c 65 74 | 65 20 3d 20 66 61 6c 73 |.complet|e = fals|
|000032f0| 65 3b 0d 09 7d 20 65 6c | 73 65 20 69 66 20 28 6e |e;..} el|se if (n|
|00003300| 75 6d 41 72 74 73 57 68 | 69 63 68 41 72 65 50 61 |umArtsWh|ichArePa|
|00003310| 72 74 73 20 3d 3d 20 31 | 20 26 26 20 21 68 61 76 |rts == 1| && !hav|
|00003320| 65 4e 6f 6e 50 6f 74 65 | 6e 74 69 61 6c 50 61 72 |eNonPote|ntialPar|
|00003330| 74 29 20 7b 0d 09 09 69 | 6e 63 6f 6d 70 6c 65 74 |t) {...i|ncomplet|
|00003340| 65 20 3d 20 66 61 6c 73 | 65 3b 0d 09 09 63 61 63 |e = fals|e;...cac|
|00003350| 68 65 50 61 72 74 73 20 | 3d 20 74 72 75 65 3b 0d |heParts |= true;.|
|00003360| 09 09 63 6f 6d 70 6c 65 | 74 65 20 3d 20 66 61 6c |..comple|te = fal|
|00003370| 73 65 3b 0d 09 7d 20 65 | 6c 73 65 20 7b 0d 09 09 |se;..} e|lse {...|
|00003380| 63 61 63 68 65 50 61 72 | 74 73 20 3d 20 74 72 75 |cachePar|ts = tru|
|00003390| 65 3b 0d 09 09 6c 61 73 | 74 50 61 72 74 20 3d 20 |e;...las|tPart = |
|000033a0| 30 3b 0d 09 09 66 6f 72 | 20 28 73 20 3d 20 74 68 |0;...for| (s = th|
|000033b0| 72 65 61 64 48 65 61 64 | 50 74 72 3b 20 73 20 3c |readHead|Ptr; s <|
|000033c0| 20 74 68 72 65 61 64 45 | 6e 64 50 74 72 3b 20 73 | threadE|ndPtr; s|
|000033d0| 2b 2b 29 20 7b 0d 09 09 | 09 78 20 3d 20 2a 73 3b |++) {...|.x = *s;|
|000033e0| 0d 09 09 09 69 66 20 28 | 78 2d 3e 70 61 72 74 4e |....if (|x->partN|
|000033f0| 75 6d 20 3d 3d 20 6c 61 | 73 74 50 61 72 74 2b 31 |um == la|stPart+1|
|00003400| 29 20 6c 61 73 74 50 61 | 72 74 20 3d 20 78 2d 3e |) lastPa|rt = x->|
|00003410| 70 61 72 74 4e 75 6d 3b | 0d 09 09 7d 0d 09 09 63 |partNum;|...}...c|
|00003420| 61 63 68 65 50 61 72 74 | 73 20 3d 20 69 6e 63 6f |achePart|s = inco|
|00003430| 6d 70 6c 65 74 65 20 3d | 20 6c 61 73 74 50 61 72 |mplete =| lastPar|
|00003440| 74 20 3c 20 6e 75 6d 50 | 61 72 74 73 3b 0d 09 09 |t < numP|arts;...|
|00003450| 63 6f 6d 70 6c 65 74 65 | 20 3d 20 21 69 6e 63 6f |complete| = !inco|
|00003460| 6d 70 6c 65 74 65 20 26 | 26 20 68 61 76 65 4f 6c |mplete &|& haveOl|
|00003470| 64 50 61 72 74 3b 0d 09 | 7d 0d 09 0d 09 74 68 72 |dPart;..|}....thr|
|00003480| 65 61 64 48 65 61 64 4e | 75 6d 62 65 72 20 3d 20 |eadHeadN|umber = |
|00003490| 28 2a 2a 74 68 72 65 61 | 64 48 65 61 64 50 74 72 |(**threa|dHeadPtr|
|000034a0| 29 2e 6e 75 6d 62 65 72 | 3b 0d 09 74 68 72 65 61 |).number|;..threa|
|000034b0| 64 4f 72 64 69 6e 61 6c | 20 3d 20 31 3b 0d 09 66 |dOrdinal| = 1;..f|
|000034c0| 6f 72 20 28 73 20 3d 20 | 74 68 72 65 61 64 48 65 |or (s = |threadHe|
|000034d0| 61 64 50 74 72 3b 20 73 | 20 3c 20 74 68 72 65 61 |adPtr; s| < threa|
|000034e0| 64 45 6e 64 50 74 72 3b | 20 73 2b 2b 29 20 7b 0d |dEndPtr;| s++) {.|
|000034f0| 09 09 78 20 3d 20 2a 73 | 3b 0d 09 09 78 2d 3e 74 |..x = *s|;...x->t|
|00003500| 68 72 65 61 64 48 65 61 | 64 4e 75 6d 62 65 72 20 |hreadHea|dNumber |
|00003510| 3d 20 74 68 72 65 61 64 | 48 65 61 64 4e 75 6d 62 |= thread|HeadNumb|
|00003520| 65 72 3b 0d 09 09 78 2d | 3e 74 68 72 65 61 64 4f |er;...x-|>threadO|
|00003530| 72 64 69 6e 61 6c 20 3d | 20 74 68 72 65 61 64 4f |rdinal =| threadO|
|00003540| 72 64 69 6e 61 6c 3b 0d | 09 09 71 20 3d 20 78 2d |rdinal;.|..q = x-|
|00003550| 3e 73 75 62 6a 65 63 74 | 3b 0d 09 09 69 6e 4c 69 |>subject|;...inLi|
|00003560| 73 74 20 3d 20 21 78 2d | 3e 66 72 6f 6d 43 61 63 |st = !x-|>fromCac|
|00003570| 68 65 20 7c 7c 20 0d 09 | 09 09 28 21 69 6e 63 6f |he || ..|..(!inco|
|00003580| 6d 70 6c 65 74 65 20 26 | 26 20 68 61 76 65 4e 65 |mplete &|& haveNe|
|00003590| 77 50 61 72 74 20 26 26 | 20 78 2d 3e 6e 75 6d 50 |wPart &&| x->numP|
|000035a0| 61 72 74 73 20 3c 20 30 | 78 37 66 66 66 29 3b 0d |arts < 0|x7fff);.|
|000035b0| 09 09 69 66 20 28 69 6e | 4c 69 73 74 29 20 7b 0d |..if (in|List) {.|
|000035c0| 09 09 09 69 66 20 28 74 | 68 72 65 61 64 4f 72 64 |...if (t|hreadOrd|
|000035d0| 69 6e 61 6c 20 3d 3d 20 | 31 29 20 74 68 72 65 61 |inal == |1) threa|
|000035e0| 64 48 65 61 64 49 6e 64 | 65 78 20 3d 20 78 2d 3e |dHeadInd|ex = x->|
|000035f0| 69 6e 64 65 78 3b 0d 09 | 09 09 69 66 20 28 63 61 |index;..|..if (ca|
|00003600| 63 68 65 50 61 72 74 73 | 20 26 26 20 21 78 2d 3e |cheParts| && !x->|
|00003610| 66 72 6f 6d 43 61 63 68 | 65 20 26 26 20 78 2d 3e |fromCach|e && x->|
|00003620| 70 61 72 74 4e 75 6d 20 | 3c 20 30 78 37 66 66 66 |partNum |< 0x7fff|
|00003630| 20 26 26 20 0d 09 09 09 | 09 67 50 61 72 65 6e 74 | && ....|.gParent|
|00003640| 49 73 55 73 65 72 47 72 | 6f 75 70 4c 69 73 74 29 |IsUserGr|oupList)|
|00003650| 20 0d 09 09 09 7b 0d 09 | 09 09 09 2f 2a 20 54 68 | ....{..|.../* Th|
|00003660| 69 73 20 69 73 20 61 20 | 6e 65 77 20 70 61 72 74 |is is a |new part|
|00003670| 20 69 6e 20 61 6e 20 69 | 6e 63 6f 6d 70 6c 65 74 | in an i|ncomplet|
|00003680| 65 20 74 68 72 65 61 64 | 20 2d 20 0d 09 09 09 09 |e thread| - .....|
|00003690| 20 20 20 61 64 64 20 69 | 74 20 74 6f 20 74 68 65 | add i|t to the|
|000036a0| 20 63 61 63 68 65 20 2a | 2f 0d 09 09 09 09 73 74 | cache *|/.....st|
|000036b0| 72 63 70 79 28 73 75 62 | 6a 65 63 74 2c 20 2a 67 |rcpy(sub|ject, *g|
|000036c0| 53 74 72 69 6e 67 73 20 | 2b 20 71 2d 3e 73 75 62 |Strings |+ q->sub|
|000036d0| 6a 65 63 74 4f 66 66 73 | 65 74 29 3b 0d 09 09 09 |jectOffs|et);....|
|000036e0| 09 73 74 72 63 70 79 28 | 61 75 74 68 6f 72 2c 20 |.strcpy(|author, |
|000036f0| 2a 67 53 74 72 69 6e 67 | 73 20 2b 20 71 2d 3e 61 |*gString|s + q->a|
|00003700| 75 74 68 6f 72 4f 66 66 | 73 65 74 29 3b 0d 09 09 |uthorOff|set);...|
|00003710| 09 09 65 72 72 20 3d 20 | 41 64 64 43 61 63 68 65 |..err = |AddCache|
|00003720| 64 41 72 74 69 63 6c 65 | 28 67 47 72 6f 75 70 4e |dArticle|(gGroupN|
|00003730| 61 6d 65 2c 20 71 2d 3e | 6e 75 6d 62 65 72 2c 20 |ame, q->|number, |
|00003740| 73 75 62 6a 65 63 74 2c | 20 61 75 74 68 6f 72 29 |subject,| author)|
|00003750| 3b 0d 09 09 09 09 69 66 | 20 28 65 72 72 20 21 3d |;.....if| (err !=|
|00003760| 20 6e 6f 45 72 72 29 20 | 72 65 74 75 72 6e 20 65 | noErr) |return e|
|00003770| 72 72 3b 0d 09 09 09 7d | 20 65 6c 73 65 20 69 66 |rr;....}| else if|
|00003780| 20 28 21 69 6e 63 6f 6d | 70 6c 65 74 65 20 26 26 | (!incom|plete &&|
|00003790| 20 78 2d 3e 66 72 6f 6d | 43 61 63 68 65 20 26 26 | x->from|Cache &&|
|000037a0| 20 78 2d 3e 70 61 72 74 | 4e 75 6d 20 3c 20 30 78 | x->part|Num < 0x|
|000037b0| 37 66 66 66 20 26 26 0d | 09 09 09 09 67 50 61 72 |7fff &&.|....gPar|
|000037c0| 65 6e 74 49 73 55 73 65 | 72 47 72 6f 75 70 4c 69 |entIsUse|rGroupLi|
|000037d0| 73 74 29 20 0d 09 09 09 | 7b 0d 09 09 09 09 2f 2a |st) ....|{...../*|
|000037e0| 20 54 68 69 73 20 69 73 | 20 70 61 72 74 20 6f 66 | This is| part of|
|000037f0| 20 61 20 74 68 72 65 61 | 64 20 77 68 69 63 68 20 | a threa|d which |
|00003800| 69 73 20 6e 6f 77 0d 09 | 09 09 09 20 20 20 63 6f |is now..|... co|
|00003810| 6d 70 6c 65 74 65 20 2d | 20 72 65 6d 6f 76 65 20 |mplete -| remove |
|00003820| 69 74 20 66 72 6f 6d 20 | 74 68 65 20 63 61 63 68 |it from |the cach|
|00003830| 65 20 2a 2f 0d 09 09 09 | 09 65 72 72 20 3d 20 44 |e */....|.err = D|
|00003840| 65 6c 65 74 65 43 61 63 | 68 65 64 41 72 74 69 63 |eleteCac|hedArtic|
|00003850| 6c 65 28 67 47 72 6f 75 | 70 4e 61 6d 65 2c 20 71 |le(gGrou|pName, q|
|00003860| 2d 3e 6e 75 6d 62 65 72 | 29 3b 0d 09 09 09 09 69 |->number|);.....i|
|00003870| 66 20 28 65 72 72 20 21 | 3d 20 6e 6f 45 72 72 29 |f (err !|= noErr)|
|00003880| 20 72 65 74 75 72 6e 20 | 65 72 72 3b 0d 09 09 09 | return |err;....|
|00003890| 7d 0d 09 09 09 71 2d 3e | 74 68 72 65 61 64 48 65 |}....q->|threadHe|
|000038a0| 61 64 49 6e 64 65 78 20 | 3d 20 74 68 72 65 61 64 |adIndex |= thread|
|000038b0| 48 65 61 64 49 6e 64 65 | 78 3b 0d 09 09 09 71 2d |HeadInde|x;....q-|
|000038c0| 3e 74 68 72 65 61 64 4f | 72 64 69 6e 61 6c 20 3d |>threadO|rdinal =|
|000038d0| 20 74 68 72 65 61 64 4f | 72 64 69 6e 61 6c 3b 0d | threadO|rdinal;.|
|000038e0| 09 09 09 69 66 20 28 6e | 75 6d 41 72 74 73 57 68 |...if (n|umArtsWh|
|000038f0| 69 63 68 41 72 65 50 61 | 72 74 73 20 3d 3d 20 31 |ichArePa|rts == 1|
|00003900| 20 26 26 20 78 2d 3e 70 | 6f 74 65 6e 74 69 61 6c | && x->p|otential|
|00003910| 50 61 72 74 29 0d 09 09 | 09 09 78 2d 3e 70 61 72 |Part)...|..x->par|
|00003920| 74 4e 75 6d 20 3d 20 78 | 2d 3e 6e 75 6d 50 61 72 |tNum = x|->numPar|
|00003930| 74 73 20 3d 20 30 78 37 | 66 66 66 3b 0d 09 09 09 |ts = 0x7|fff;....|
|00003940| 71 2d 3e 70 61 72 74 4e | 75 6d 20 3d 20 78 2d 3e |q->partN|um = x->|
|00003950| 70 61 72 74 4e 75 6d 3b | 0d 09 09 09 71 2d 3e 6e |partNum;|....q->n|
|00003960| 75 6d 50 61 72 74 73 20 | 3d 20 78 2d 3e 6e 75 6d |umParts |= x->num|
|00003970| 50 61 72 74 73 3b 0d 09 | 09 09 71 2d 3e 72 65 61 |Parts;..|..q->rea|
|00003980| 64 20 3d 20 66 61 6c 73 | 65 3b 0d 09 09 09 71 2d |d = fals|e;....q-|
|00003990| 3e 69 6e 63 6f 6d 70 6c | 65 74 65 20 3d 20 69 6e |>incompl|ete = in|
|000039a0| 63 6f 6d 70 6c 65 74 65 | 3b 0d 09 09 09 71 2d 3e |complete|;....q->|
|000039b0| 63 6f 6d 70 6c 65 74 65 | 20 3d 20 63 6f 6d 70 6c |complete| = compl|
|000039c0| 65 74 65 3b 0d 09 09 09 | 71 2d 3e 69 6e 4c 69 73 |ete;....|q->inLis|
|000039d0| 74 20 3d 20 74 72 75 65 | 3b 0d 09 09 09 74 68 72 |t = true|;....thr|
|000039e0| 65 61 64 4f 72 64 69 6e | 61 6c 2b 2b 3b 0d 09 09 |eadOrdin|al++;...|
|000039f0| 7d 20 65 6c 73 65 20 7b | 0d 09 09 09 71 2d 3e 69 |} else {|....q->i|
|00003a00| 6e 4c 69 73 74 20 3d 20 | 66 61 6c 73 65 3b 0d 09 |nList = |false;..|
|00003a10| 09 7d 0d 09 7d 0d 09 0d | 09 74 68 72 65 61 64 4c |.}..}...|.threadL|
|00003a20| 65 6e 67 74 68 20 3d 20 | 74 68 72 65 61 64 4f 72 |ength = |threadOr|
|00003a30| 64 69 6e 61 6c 20 2d 20 | 31 3b 0d 09 69 66 20 28 |dinal - |1;..if (|
|00003a40| 74 68 72 65 61 64 4c 65 | 6e 67 74 68 20 3d 3d 20 |threadLe|ngth == |
|00003a50| 30 29 20 72 65 74 75 72 | 6e 20 6e 6f 45 72 72 3b |0) retur|n noErr;|
|00003a60| 0d 09 0d 09 70 72 65 76 | 49 6e 4c 69 73 74 20 3d |....prev|InList =|
|00003a70| 20 6e 69 6c 3b 0d 09 66 | 6f 72 20 28 73 20 3d 20 | nil;..f|or (s = |
|00003a80| 74 68 72 65 61 64 48 65 | 61 64 50 74 72 3b 20 73 |threadHe|adPtr; s|
|00003a90| 20 3c 20 74 68 72 65 61 | 64 45 6e 64 50 74 72 3b | < threa|dEndPtr;|
|00003aa0| 20 73 2b 2b 29 20 7b 0d | 09 09 78 20 3d 20 2a 73 | s++) {.|..x = *s|
|00003ab0| 3b 0d 09 09 71 20 3d 20 | 78 2d 3e 73 75 62 6a 65 |;...q = |x->subje|
|00003ac0| 63 74 3b 0d 09 09 69 66 | 20 28 71 2d 3e 69 6e 4c |ct;...if| (q->inL|
|00003ad0| 69 73 74 29 20 7b 0d 09 | 09 09 71 2d 3e 74 68 72 |ist) {..|..q->thr|
|00003ae0| 65 61 64 4c 65 6e 67 74 | 68 20 3d 20 74 68 72 65 |eadLengt|h = thre|
|00003af0| 61 64 4c 65 6e 67 74 68 | 3b 0d 09 09 09 69 66 20 |adLength|;....if |
|00003b00| 28 70 72 65 76 49 6e 4c | 69 73 74 20 21 3d 20 6e |(prevInL|ist != n|
|00003b10| 69 6c 29 20 70 72 65 76 | 49 6e 4c 69 73 74 2d 3e |il) prev|InList->|
|00003b20| 6e 65 78 74 49 6e 54 68 | 72 65 61 64 20 3d 20 78 |nextInTh|read = x|
|00003b30| 2d 3e 69 6e 64 65 78 3b | 0d 09 09 09 70 72 65 76 |->index;|....prev|
|00003b40| 49 6e 4c 69 73 74 20 3d | 20 71 3b 0d 09 09 7d 0d |InList =| q;...}.|
|00003b50| 09 7d 0d 09 70 72 65 76 | 49 6e 4c 69 73 74 2d 3e |.}..prev|InList->|
|00003b60| 6e 65 78 74 49 6e 54 68 | 72 65 61 64 20 3d 20 2d |nextInTh|read = -|
|00003b70| 31 3b 0d 09 0d 09 72 65 | 74 75 72 6e 20 6e 6f 45 |1;....re|turn noE|
|00003b80| 72 72 3b 0d 7d 0d 0d 0d | 0d 2f 2a 2d 2d 2d 2d 2d |rr;.}...|./*-----|
|00003b90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003ba0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003bb0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003bc0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003bd0| 2d 2d 2d 2d 2d 2d 2d 0d | 09 53 6f 72 74 41 72 72 |-------.|.SortArr|
|00003be0| 61 79 20 0d 09 0d 09 53 | 6f 72 74 20 74 68 65 20 |ay ....S|ort the |
|00003bf0| 61 72 72 61 79 20 6f 66 | 20 54 53 6f 72 74 49 6e |array of| TSortIn|
|00003c00| 66 6f 20 70 6f 69 6e 74 | 65 72 73 20 69 6e 74 6f |fo point|ers into|
|00003c10| 20 74 68 72 65 61 64 20 | 6f 72 64 65 72 2e 20 0d | thread |order. .|
|00003c20| 09 0d 09 45 6e 74 72 79 | 3a 09 73 6f 72 74 49 6e |...Entry|:.sortIn|
|00003c30| 66 6f 50 74 72 73 20 3d | 20 70 6f 69 6e 74 65 72 |foPtrs =| pointer|
|00003c40| 20 74 6f 20 61 72 72 61 | 79 20 6f 66 20 70 6f 69 | to arra|y of poi|
|00003c50| 6e 74 65 72 73 20 74 6f | 20 54 53 6f 72 74 49 6e |nters to| TSortIn|
|00003c60| 66 6f 20 72 65 63 6f 72 | 64 73 2e 0d 09 09 09 6e |fo recor|ds.....n|
|00003c70| 75 6d 53 75 62 6a 65 63 | 74 73 20 3d 20 6e 75 6d |umSubjec|ts = num|
|00003c80| 62 65 72 20 6f 66 20 73 | 75 62 6a 65 63 74 73 2e |ber of s|ubjects.|
|00003c90| 0d 09 09 09 0d 09 45 78 | 69 74 3a 09 66 75 6e 63 |......Ex|it:.func|
|00003ca0| 74 69 6f 6e 20 72 65 73 | 75 6c 74 20 3d 20 65 72 |tion res|ult = er|
|00003cb0| 72 6f 72 20 63 6f 64 65 | 2e 20 0d 2d 2d 2d 2d 2d |ror code|. .-----|
|00003cc0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003cd0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003ce0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003cf0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003d00| 2d 2d 2d 2d 2d 2d 2d 2a | 2f 0d 0d 73 74 61 74 69 |-------*|/..stati|
|00003d10| 63 20 4f 53 45 72 72 20 | 53 6f 72 74 41 72 72 61 |c OSErr |SortArra|
|00003d20| 79 20 28 54 53 6f 72 74 | 49 6e 66 6f 50 74 72 20 |y (TSort|InfoPtr |
|00003d30| 2a 73 6f 72 74 49 6e 66 | 6f 50 74 72 73 2c 20 73 |*sortInf|oPtrs, s|
|00003d40| 68 6f 72 74 20 6e 75 6d | 53 75 62 6a 65 63 74 73 |hort num|Subjects|
|00003d50| 29 0d 7b 0d 09 54 53 6f | 72 74 49 6e 66 6f 20 2a |).{..TSo|rtInfo *|
|00003d60| 2a 72 2c 20 2a 2a 74 68 | 72 65 61 64 48 65 61 64 |*r, **th|readHead|
|00003d70| 50 74 72 3b 0d 09 63 68 | 61 72 20 2a 74 68 72 65 |Ptr;..ch|ar *thre|
|00003d80| 61 64 48 65 61 64 53 75 | 62 6a 65 63 74 3b 0d 09 |adHeadSu|bject;..|
|00003d90| 42 6f 6f 6c 65 61 6e 20 | 6e 65 77 54 68 72 65 61 |Boolean |newThrea|
|00003da0| 64 3b 0d 09 73 68 6f 72 | 74 20 69 3b 0d 09 4f 53 |d;..shor|t i;..OS|
|00003db0| 45 72 72 20 65 72 72 20 | 3d 20 6e 6f 45 72 72 3b |Err err |= noErr;|
|00003dc0| 0d 09 0d 09 2f 2a 09 53 | 6f 72 74 20 74 68 65 20 |..../*.S|ort the |
|00003dd0| 70 6f 69 6e 74 65 72 20 | 61 72 72 61 79 20 69 6e |pointer |array in|
|00003de0| 74 6f 20 69 6e 63 72 65 | 61 73 69 6e 67 20 6f 72 |to incre|asing or|
|00003df0| 64 65 72 20 62 79 20 63 | 61 6e 6f 6e 69 63 61 6c |der by c|anonical|
|00003e00| 20 73 75 62 6a 65 63 74 | 2e 20 0d 09 09 54 68 69 | subject|. ...Thi|
|00003e10| 73 20 62 72 69 6e 67 73 | 20 74 68 72 65 61 64 73 |s brings| threads|
|00003e20| 20 74 6f 67 65 74 68 65 | 72 2c 20 61 6c 74 68 6f | togethe|r, altho|
|00003e30| 75 67 68 20 74 68 65 20 | 74 68 72 65 61 64 73 20 |ugh the |threads |
|00003e40| 61 72 65 20 6e 6f 74 20 | 69 6e 20 74 68 65 20 0d |are not |in the .|
|00003e50| 09 09 72 69 67 68 74 20 | 6f 72 64 65 72 20 79 65 |..right |order ye|
|00003e60| 74 2e 20 54 68 65 20 61 | 72 74 69 63 6c 65 20 6e |t. The a|rticle n|
|00003e70| 75 6d 62 65 72 73 20 61 | 72 65 20 75 73 65 64 20 |umbers a|re used |
|00003e80| 61 73 20 61 20 73 65 63 | 6f 6e 64 61 72 79 20 73 |as a sec|ondary s|
|00003e90| 6f 72 74 20 0d 09 09 6b | 65 79 20 74 6f 20 6b 65 |ort ...k|ey to ke|
|00003ea0| 70 20 74 68 65 20 61 72 | 74 69 63 6c 65 73 20 77 |p the ar|ticles w|
|00003eb0| 69 74 68 69 6e 20 61 20 | 74 68 72 65 61 64 20 69 |ithin a |thread i|
|00003ec0| 6e 20 74 68 65 20 63 6f | 72 72 65 63 74 20 6f 72 |n the co|rrect or|
|00003ed0| 64 65 72 2e 20 2a 2f 0d | 09 09 0d 09 65 72 72 20 |der. */.|....err |
|00003ee0| 3d 20 46 61 73 74 51 53 | 6f 72 74 28 73 6f 72 74 |= FastQS|ort(sort|
|00003ef0| 49 6e 66 6f 50 74 72 73 | 2c 20 6e 75 6d 53 75 62 |InfoPtrs|, numSub|
|00003f00| 6a 65 63 74 73 2c 20 73 | 69 7a 65 6f 66 28 54 53 |jects, s|izeof(TS|
|00003f10| 6f 72 74 49 6e 66 6f 50 | 74 72 29 2c 0d 09 09 28 |ortInfoP|tr),...(|
|00003f20| 53 6f 72 74 43 6d 70 46 | 75 6e 63 74 69 6f 6e 29 |SortCmpF|unction)|
|00003f30| 53 6f 72 74 53 75 62 6a | 65 63 74 41 72 72 61 79 |SortSubj|ectArray|
|00003f40| 43 6f 6d 70 61 72 65 31 | 29 3b 0d 09 69 66 20 28 |Compare1|);..if (|
|00003f50| 65 72 72 20 21 3d 20 6e | 6f 45 72 72 29 20 72 65 |err != n|oErr) re|
|00003f60| 74 75 72 6e 20 65 72 72 | 3b 0d 09 0d 09 2f 2a 09 |turn err|;..../*.|
|00003f70| 50 72 6f 63 65 73 73 20 | 74 68 65 20 74 68 72 65 |Process |the thre|
|00003f80| 61 64 73 2e 20 2a 2f 0d | 09 09 0d 09 66 6f 72 20 |ads. */.|....for |
|00003f90| 28 69 20 3d 20 30 2c 20 | 72 20 3d 20 73 6f 72 74 |(i = 0, |r = sort|
|00003fa0| 49 6e 66 6f 50 74 72 73 | 3b 20 69 20 3c 20 6e 75 |InfoPtrs|; i < nu|
|00003fb0| 6d 53 75 62 6a 65 63 74 | 73 3b 20 69 2b 2b 2c 20 |mSubject|s; i++, |
|00003fc0| 72 2b 2b 29 20 7b 0d 09 | 09 6e 65 77 54 68 72 65 |r++) {..|.newThre|
|00003fd0| 61 64 20 3d 20 69 20 3d | 3d 20 30 20 7c 7c 20 73 |ad = i =|= 0 || s|
|00003fe0| 74 72 63 6d 70 28 28 2a | 2a 72 29 2e 63 61 6e 6f |trcmp((*|*r).cano|
|00003ff0| 6e 2c 20 74 68 72 65 61 | 64 48 65 61 64 53 75 62 |n, threa|dHeadSub|
|00004000| 6a 65 63 74 29 20 21 3d | 20 30 3b 0d 09 09 69 66 |ject) !=| 0;...if|
|00004010| 20 28 6e 65 77 54 68 72 | 65 61 64 29 20 7b 0d 09 | (newThr|ead) {..|
|00004020| 09 09 69 66 20 28 69 20 | 21 3d 20 30 29 20 7b 0d |..if (i |!= 0) {.|
|00004030| 09 09 09 09 65 72 72 20 | 3d 20 50 72 6f 63 65 73 |....err |= Proces|
|00004040| 73 54 68 72 65 61 64 28 | 74 68 72 65 61 64 48 65 |sThread(|threadHe|
|00004050| 61 64 50 74 72 2c 20 72 | 29 3b 0d 09 09 09 09 69 |adPtr, r|);.....i|
|00004060| 66 20 28 65 72 72 20 21 | 3d 20 6e 6f 45 72 72 29 |f (err !|= noErr)|
|00004070| 20 72 65 74 75 72 6e 20 | 65 72 72 3b 0d 09 09 09 | return |err;....|
|00004080| 7d 0d 09 09 09 74 68 72 | 65 61 64 48 65 61 64 50 |}....thr|eadHeadP|
|00004090| 74 72 20 3d 20 72 3b 0d | 09 09 09 74 68 72 65 61 |tr = r;.|...threa|
|000040a0| 64 48 65 61 64 53 75 62 | 6a 65 63 74 20 3d 20 28 |dHeadSub|ject = (|
|000040b0| 2a 2a 72 29 2e 63 61 6e | 6f 6e 3b 0d 09 09 7d 0d |**r).can|on;...}.|
|000040c0| 09 7d 0d 09 65 72 72 20 | 3d 20 50 72 6f 63 65 73 |.}..err |= Proces|
|000040d0| 73 54 68 72 65 61 64 28 | 74 68 72 65 61 64 48 65 |sThread(|threadHe|
|000040e0| 61 64 50 74 72 2c 20 72 | 29 3b 0d 09 69 66 20 28 |adPtr, r|);..if (|
|000040f0| 65 72 72 20 21 3d 20 6e | 6f 45 72 72 29 20 72 65 |err != n|oErr) re|
|00004100| 74 75 72 6e 20 65 72 72 | 3b 0d 09 0d 09 2f 2a 09 |turn err|;..../*.|
|00004110| 53 6f 72 74 20 74 68 65 | 20 70 6f 69 6e 74 65 72 |Sort the| pointer|
|00004120| 20 61 72 72 61 79 20 69 | 6e 74 6f 20 66 69 6e 61 | array i|nto fina|
|00004130| 6c 20 74 68 72 65 61 64 | 20 6f 72 64 65 72 2e 20 |l thread| order. |
|00004140| 54 68 65 20 70 72 69 6d | 61 72 79 0d 09 09 73 6f |The prim|ary...so|
|00004150| 72 74 20 6b 65 79 20 69 | 73 20 74 68 72 65 61 64 |rt key i|s thread|
|00004160| 48 65 61 64 4e 75 6d 62 | 65 72 2e 20 54 68 65 20 |HeadNumb|er. The |
|00004170| 73 65 63 6f 6e 64 61 72 | 79 20 73 6f 72 74 20 6b |secondar|y sort k|
|00004180| 65 79 20 69 73 20 74 68 | 65 0d 09 09 74 68 72 65 |ey is th|e...thre|
|00004190| 61 64 20 6f 72 64 69 6e | 61 6c 2e 20 54 68 69 73 |ad ordin|al. This|
|000041a0| 20 66 69 6e 61 6c 20 73 | 6f 72 74 20 73 6f 72 74 | final s|ort sort|
|000041b0| 73 20 74 68 65 20 74 68 | 72 65 61 64 73 20 69 6e |s the th|reads in|
|000041c0| 74 6f 20 70 72 6f 70 65 | 72 20 0d 09 09 63 68 72 |to prope|r ...chr|
|000041d0| 6f 6e 6f 6c 6f 67 69 63 | 61 6c 20 6f 72 64 65 72 |onologic|al order|
|000041e0| 2c 20 6b 65 65 70 69 6e | 67 20 74 68 65 20 61 72 |, keepin|g the ar|
|000041f0| 74 69 63 6c 65 73 20 77 | 69 74 68 69 6e 20 74 68 |ticles w|ithin th|
|00004200| 65 20 74 68 72 65 61 64 | 73 20 0d 09 09 74 6f 67 |e thread|s ...tog|
|00004210| 65 74 68 65 72 2e 20 2a | 2f 0d 09 09 0d 09 72 65 |ether. *|/.....re|
|00004220| 74 75 72 6e 20 46 61 73 | 74 51 53 6f 72 74 28 73 |turn Fas|tQSort(s|
|00004230| 6f 72 74 49 6e 66 6f 50 | 74 72 73 2c 20 6e 75 6d |ortInfoP|trs, num|
|00004240| 53 75 62 6a 65 63 74 73 | 2c 20 73 69 7a 65 6f 66 |Subjects|, sizeof|
|00004250| 28 54 53 6f 72 74 49 6e | 66 6f 50 74 72 29 2c 0d |(TSortIn|foPtr),.|
|00004260| 09 09 28 53 6f 72 74 43 | 6d 70 46 75 6e 63 74 69 |..(SortC|mpFuncti|
|00004270| 6f 6e 29 53 6f 72 74 53 | 75 62 6a 65 63 74 41 72 |on)SortS|ubjectAr|
|00004280| 72 61 79 43 6f 6d 70 61 | 72 65 32 29 3b 0d 7d 0d |rayCompa|re2);.}.|
|00004290| 0d 0d 0d 2f 2a 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |.../*---|--------|
|000042a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000042b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000042c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000042d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000042e0| 2d 0d 09 53 70 6c 69 74 | 50 61 72 74 54 68 72 65 |-..Split|PartThre|
|000042f0| 61 64 73 0d 09 0d 09 53 | 70 6c 69 74 20 70 61 72 |ads....S|plit par|
|00004300| 74 20 74 68 72 65 61 64 | 73 20 69 6e 74 6f 20 74 |t thread|s into t|
|00004310| 77 6f 20 74 68 72 65 61 | 64 73 2c 20 74 68 65 20 |wo threa|ds, the |
|00004320| 66 69 72 73 74 20 6f 6e | 65 20 63 6f 6e 74 61 69 |first on|e contai|
|00004330| 6e 69 6e 67 20 6a 75 73 | 74 20 74 68 65 0d 09 70 |ning jus|t the..p|
|00004340| 61 72 74 73 2c 20 61 6e | 64 20 74 68 65 20 73 65 |arts, an|d the se|
|00004350| 63 6f 6e 64 20 6f 6e 65 | 20 63 6f 6e 74 61 69 6e |cond one| contain|
|00004360| 69 6e 67 20 6a 75 73 74 | 20 74 68 65 20 66 6f 6c |ing just| the fol|
|00004370| 6c 6f 77 75 70 73 2e 0d | 09 0d 09 45 6e 74 72 79 |lowups..|...Entry|
|00004380| 3a 09 73 75 62 6a 65 63 | 74 41 72 72 61 79 20 3d |:.subjec|tArray =|
|00004390| 20 70 6f 69 6e 74 65 72 | 20 74 6f 20 73 75 62 6a | pointer| to subj|
|000043a0| 65 63 74 20 61 72 72 61 | 79 0d 09 09 09 6e 75 6d |ect arra|y....num|
|000043b0| 53 75 62 6a 65 63 74 73 | 20 3d 20 6e 75 6d 62 65 |Subjects| = numbe|
|000043c0| 72 20 6f 66 20 73 75 62 | 6a 65 63 74 73 2e 0d 2d |r of sub|jects..-|
|000043d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000043e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000043f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004400| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004410| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2a 2f 0d 0d 73 |--------|---*/..s|
|00004420| 74 61 74 69 63 20 76 6f | 69 64 20 53 70 6c 69 74 |tatic vo|id Split|
|00004430| 50 61 72 74 54 68 72 65 | 61 64 73 20 28 54 53 75 |PartThre|ads (TSu|
|00004440| 62 6a 65 63 74 20 2a 73 | 75 62 6a 65 63 74 41 72 |bject *s|ubjectAr|
|00004450| 72 61 79 2c 20 73 68 6f | 72 74 20 6e 75 6d 53 75 |ray, sho|rt numSu|
|00004460| 62 6a 65 63 74 73 29 0d | 7b 0d 09 73 68 6f 72 74 |bjects).|{..short|
|00004470| 20 69 2c 20 6a 3b 0d 09 | 54 53 75 62 6a 65 63 74 | i, j;..|TSubject|
|00004480| 20 2a 73 2c 20 2a 74 3b | 0d 09 73 68 6f 72 74 20 | *s, *t;|..short |
|00004490| 70 61 72 74 73 54 68 72 | 65 61 64 4c 65 6e 67 74 |partsThr|eadLengt|
|000044a0| 68 2c 20 66 6f 6c 6c 6f | 77 75 70 73 54 68 72 65 |h, follo|wupsThre|
|000044b0| 61 64 4c 65 6e 67 74 68 | 3b 0d 09 73 68 6f 72 74 |adLength|;..short|
|000044c0| 20 66 6f 6c 6c 6f 77 75 | 70 73 54 68 72 65 61 64 | followu|psThread|
|000044d0| 48 65 61 64 49 6e 64 65 | 78 3b 0d 09 73 68 6f 72 |HeadInde|x;..shor|
|000044e0| 74 20 6e 65 78 74 49 6e | 54 68 72 65 61 64 3b 0d |t nextIn|Thread;.|
|000044f0| 09 09 0d 09 66 6f 72 20 | 28 69 20 3d 20 30 2c 20 |....for |(i = 0, |
|00004500| 73 20 3d 20 73 75 62 6a | 65 63 74 41 72 72 61 79 |s = subj|ectArray|
|00004510| 3b 20 69 20 3c 20 6e 75 | 6d 53 75 62 6a 65 63 74 |; i < nu|mSubject|
|00004520| 73 3b 20 69 2b 2b 2c 20 | 73 2b 2b 29 20 7b 0d 09 |s; i++, |s++) {..|
|00004530| 09 69 66 20 28 21 73 2d | 3e 69 6e 4c 69 73 74 29 |.if (!s-|>inList)|
|00004540| 20 63 6f 6e 74 69 6e 75 | 65 3b 0d 09 09 69 66 20 | continu|e;...if |
|00004550| 28 73 2d 3e 74 68 72 65 | 61 64 4f 72 64 69 6e 61 |(s->thre|adOrdina|
|00004560| 6c 20 21 3d 20 31 29 20 | 63 6f 6e 74 69 6e 75 65 |l != 1) |continue|
|00004570| 3b 0d 09 09 69 66 20 28 | 73 2d 3e 74 68 72 65 61 |;...if (|s->threa|
|00004580| 64 4c 65 6e 67 74 68 20 | 3d 3d 20 31 29 20 63 6f |dLength |== 1) co|
|00004590| 6e 74 69 6e 75 65 3b 0d | 09 09 69 66 20 28 73 2d |ntinue;.|..if (s-|
|000045a0| 3e 70 61 72 74 4e 75 6d | 20 3d 3d 20 30 78 37 66 |>partNum| == 0x7f|
|000045b0| 66 66 29 20 63 6f 6e 74 | 69 6e 75 65 3b 0d 09 09 |ff) cont|inue;...|
|000045c0| 74 20 3d 20 73 3b 0d 09 | 09 70 61 72 74 73 54 68 |t = s;..|.partsTh|
|000045d0| 72 65 61 64 4c 65 6e 67 | 74 68 20 3d 20 30 3b 0d |readLeng|th = 0;.|
|000045e0| 09 09 77 68 69 6c 65 20 | 28 74 2d 3e 70 61 72 74 |..while |(t->part|
|000045f0| 4e 75 6d 20 3c 20 30 78 | 37 66 66 66 20 26 26 20 |Num < 0x|7fff && |
|00004600| 74 2d 3e 6e 65 78 74 49 | 6e 54 68 72 65 61 64 20 |t->nextI|nThread |
|00004610| 21 3d 20 2d 31 29 20 7b | 0d 09 09 09 70 61 72 74 |!= -1) {|....part|
|00004620| 73 54 68 72 65 61 64 4c | 65 6e 67 74 68 2b 2b 3b |sThreadL|ength++;|
|00004630| 0d 09 09 09 74 20 3d 20 | 73 75 62 6a 65 63 74 41 |....t = |subjectA|
|00004640| 72 72 61 79 20 2b 20 74 | 2d 3e 6e 65 78 74 49 6e |rray + t|->nextIn|
|00004650| 54 68 72 65 61 64 3b 0d | 09 09 7d 0d 09 09 69 66 |Thread;.|..}...if|
|00004660| 20 28 74 2d 3e 70 61 72 | 74 4e 75 6d 20 3c 20 30 | (t->par|tNum < 0|
|00004670| 78 37 66 66 66 29 20 63 | 6f 6e 74 69 6e 75 65 3b |x7fff) c|ontinue;|
|00004680| 0d 09 09 74 20 3d 20 73 | 3b 0d 09 09 66 6f 72 20 |...t = s|;...for |
|00004690| 28 6a 20 3d 20 31 3b 20 | 6a 20 3c 3d 20 70 61 72 |(j = 1; |j <= par|
|000046a0| 74 73 54 68 72 65 61 64 | 4c 65 6e 67 74 68 3b 20 |tsThread|Length; |
|000046b0| 6a 2b 2b 29 20 7b 0d 09 | 09 09 74 2d 3e 74 68 72 |j++) {..|..t->thr|
|000046c0| 65 61 64 4c 65 6e 67 74 | 68 20 3d 20 70 61 72 74 |eadLengt|h = part|
|000046d0| 73 54 68 72 65 61 64 4c | 65 6e 67 74 68 3b 0d 09 |sThreadL|ength;..|
|000046e0| 09 09 6e 65 78 74 49 6e | 54 68 72 65 61 64 20 3d |..nextIn|Thread =|
|000046f0| 20 74 2d 3e 6e 65 78 74 | 49 6e 54 68 72 65 61 64 | t->next|InThread|
|00004700| 3b 0d 09 09 09 69 66 20 | 28 6a 20 3d 3d 20 70 61 |;....if |(j == pa|
|00004710| 72 74 73 54 68 72 65 61 | 64 4c 65 6e 67 74 68 29 |rtsThrea|dLength)|
|00004720| 20 7b 0d 09 09 09 09 66 | 6f 6c 6c 6f 77 75 70 73 | {.....f|ollowups|
|00004730| 54 68 72 65 61 64 48 65 | 61 64 49 6e 64 65 78 20 |ThreadHe|adIndex |
|00004740| 3d 20 6e 65 78 74 49 6e | 54 68 72 65 61 64 3b 0d |= nextIn|Thread;.|
|00004750| 09 09 09 09 74 2d 3e 6e | 65 78 74 49 6e 54 68 72 |....t->n|extInThr|
|00004760| 65 61 64 20 3d 20 2d 31 | 3b 0d 09 09 09 7d 0d 09 |ead = -1|;....}..|
|00004770| 09 09 74 20 3d 20 73 75 | 62 6a 65 63 74 41 72 72 |..t = su|bjectArr|
|00004780| 61 79 20 2b 20 6e 65 78 | 74 49 6e 54 68 72 65 61 |ay + nex|tInThrea|
|00004790| 64 3b 0d 09 09 7d 0d 09 | 09 66 6f 6c 6c 6f 77 75 |d;...}..|.followu|
|000047a0| 70 73 54 68 72 65 61 64 | 4c 65 6e 67 74 68 20 3d |psThread|Length =|
|000047b0| 20 74 2d 3e 74 68 72 65 | 61 64 4c 65 6e 67 74 68 | t->thre|adLength|
|000047c0| 20 2d 20 70 61 72 74 73 | 54 68 72 65 61 64 4c 65 | - parts|ThreadLe|
|000047d0| 6e 67 74 68 3b 0d 09 09 | 66 6f 72 20 28 6a 20 3d |ngth;...|for (j =|
|000047e0| 20 31 3b 20 6a 20 3c 3d | 20 66 6f 6c 6c 6f 77 75 | 1; j <=| followu|
|000047f0| 70 73 54 68 72 65 61 64 | 4c 65 6e 67 74 68 3b 20 |psThread|Length; |
|00004800| 6a 2b 2b 29 20 7b 0d 09 | 09 09 74 2d 3e 74 68 72 |j++) {..|..t->thr|
|00004810| 65 61 64 48 65 61 64 49 | 6e 64 65 78 20 3d 20 66 |eadHeadI|ndex = f|
|00004820| 6f 6c 6c 6f 77 75 70 73 | 54 68 72 65 61 64 48 65 |ollowups|ThreadHe|
|00004830| 61 64 49 6e 64 65 78 3b | 0d 09 09 09 74 2d 3e 74 |adIndex;|....t->t|
|00004840| 68 72 65 61 64 4f 72 64 | 69 6e 61 6c 20 3d 20 6a |hreadOrd|inal = j|
|00004850| 3b 0d 09 09 09 74 2d 3e | 74 68 72 65 61 64 4c 65 |;....t->|threadLe|
|00004860| 6e 67 74 68 20 3d 20 66 | 6f 6c 6c 6f 77 75 70 73 |ngth = f|ollowups|
|00004870| 54 68 72 65 61 64 4c 65 | 6e 67 74 68 3b 0d 09 09 |ThreadLe|ngth;...|
|00004880| 09 74 2d 3e 69 6e 63 6f | 6d 70 6c 65 74 65 20 3d |.t->inco|mplete =|
|00004890| 20 74 2d 3e 63 6f 6d 70 | 6c 65 74 65 20 3d 20 66 | t->comp|lete = f|
|000048a0| 61 6c 73 65 3b 0d 09 09 | 09 74 20 3d 20 73 75 62 |alse;...|.t = sub|
|000048b0| 6a 65 63 74 41 72 72 61 | 79 20 2b 20 74 2d 3e 6e |jectArra|y + t->n|
|000048c0| 65 78 74 49 6e 54 68 72 | 65 61 64 3b 0d 09 09 7d |extInThr|ead;...}|
|000048d0| 0d 09 7d 0d 7d 0d 0d 0d | 0d 2f 2a 2d 2d 2d 2d 2d |..}.}...|./*-----|
|000048e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000048f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004900| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004910| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004920| 2d 2d 2d 2d 2d 2d 2d 0d | 09 53 6f 72 74 53 75 62 |-------.|.SortSub|
|00004930| 6a 65 63 74 41 72 72 61 | 79 43 6f 6d 70 61 72 65 |jectArra|yCompare|
|00004940| 33 0d 09 0d 09 54 68 69 | 73 20 69 73 20 74 68 65 |3....Thi|s is the|
|00004950| 20 63 6f 6d 70 61 72 69 | 73 6f 6e 20 66 75 6e 63 | compari|son func|
|00004960| 74 69 6f 6e 20 75 73 65 | 64 20 74 6f 20 73 6f 72 |tion use|d to sor|
|00004970| 74 20 61 6e 20 61 72 72 | 61 79 20 6f 66 20 70 6f |t an arr|ay of po|
|00004980| 69 6e 74 65 72 73 20 74 | 6f 20 0d 09 54 53 75 62 |inters t|o ..TSub|
|00004990| 6a 65 63 74 20 72 65 63 | 6f 72 64 73 20 69 6e 74 |ject rec|ords int|
|000049a0| 6f 20 69 6e 63 72 65 61 | 73 69 6e 67 20 6f 72 64 |o increa|sing ord|
|000049b0| 65 72 20 62 79 20 61 72 | 74 69 63 6c 65 20 6e 75 |er by ar|ticle nu|
|000049c0| 6d 62 65 72 2e 20 49 74 | 20 69 73 20 75 73 65 64 |mber. It| is used|
|000049d0| 0d 09 62 79 20 74 68 65 | 20 42 75 69 6c 64 53 6f |..by the| BuildSo|
|000049e0| 72 74 41 72 72 61 79 42 | 79 4e 75 6d 62 65 72 20 |rtArrayB|yNumber |
|000049f0| 66 75 6e 63 74 69 6f 6e | 20 62 65 6c 6f 77 2e 0d |function| below..|
|00004a00| 09 0d 09 45 6e 74 72 79 | 3a 09 70 20 3d 20 70 6f |...Entry|:.p = po|
|00004a10| 69 6e 74 65 72 20 74 6f | 20 70 6f 69 6e 74 65 72 |inter to| pointer|
|00004a20| 20 74 6f 20 54 53 75 62 | 6a 65 63 74 20 72 65 63 | to TSub|ject rec|
|00004a30| 6f 72 64 2e 0d 09 09 09 | 71 20 3d 20 70 6f 69 6e |ord.....|q = poin|
|00004a40| 74 65 72 20 74 6f 20 70 | 6f 69 6e 74 65 72 20 74 |ter to p|ointer t|
|00004a50| 6f 20 54 53 75 62 6a 65 | 63 74 20 72 65 63 6f 72 |o TSubje|ct recor|
|00004a60| 64 2e 0d 09 09 09 0d 09 | 45 78 69 74 3a 09 66 75 |d.......|Exit:.fu|
|00004a70| 6e 63 74 69 6f 6e 20 72 | 65 73 75 6c 74 20 3d 20 |nction r|esult = |
|00004a80| 65 72 72 6f 72 20 63 6f | 64 65 2e 0d 09 09 09 2a |error co|de.....*|
|00004a90| 72 65 73 75 6c 74 0d 09 | 09 09 09 3c 20 30 20 69 |result..|...< 0 i|
|00004aa0| 66 20 66 69 72 73 74 20 | 61 72 74 69 63 6c 65 20 |f first |article |
|00004ab0| 6e 75 6d 62 65 72 20 3c | 20 73 65 63 6f 6e 64 20 |number <| second |
|00004ac0| 61 72 74 69 63 6c 65 20 | 6e 75 6d 62 65 72 2e 0d |article |number..|
|00004ad0| 09 09 09 09 3e 20 30 20 | 69 66 20 66 69 72 73 74 |....> 0 |if first|
|00004ae0| 20 61 72 74 69 63 6c 65 | 20 6e 75 6d 62 65 72 20 | article| number |
|00004af0| 3e 20 73 65 63 6f 6e 64 | 20 61 72 74 69 63 6c 65 |> second| article|
|00004b00| 20 6e 75 6d 62 65 72 2e | 0d 2d 2d 2d 2d 2d 2d 2d | number.|.-------|
|00004b10| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004b20| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004b30| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004b40| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004b50| 2d 2d 2d 2d 2d 2a 2f 0d | 0d 73 74 61 74 69 63 20 |-----*/.|.static |
|00004b60| 4f 53 45 72 72 20 53 6f | 72 74 53 75 62 6a 65 63 |OSErr So|rtSubjec|
|00004b70| 74 41 72 72 61 79 43 6f | 6d 70 61 72 65 33 20 28 |tArrayCo|mpare3 (|
|00004b80| 54 53 75 62 6a 65 63 74 | 20 2a 2a 70 2c 20 54 53 |TSubject| **p, TS|
|00004b90| 75 62 6a 65 63 74 20 2a | 2a 71 2c 20 73 68 6f 72 |ubject *|*q, shor|
|00004ba0| 74 20 2a 72 65 73 75 6c | 74 29 0d 7b 0d 09 4f 53 |t *resul|t).{..OS|
|00004bb0| 45 72 72 20 65 72 72 3b | 0d 09 73 74 61 74 69 63 |Err err;|..static|
|00004bc0| 20 73 68 6f 72 74 20 63 | 6f 75 6e 74 65 72 20 3d | short c|ounter =|
|00004bd0| 20 30 3b 0d 0d 09 69 66 | 20 28 28 2b 2b 63 6f 75 | 0;...if| ((++cou|
|00004be0| 6e 74 65 72 20 26 20 30 | 78 31 66 29 20 3d 3d 20 |nter & 0|x1f) == |
|00004bf0| 30 29 20 7b 0d 09 09 65 | 72 72 20 3d 20 47 69 76 |0) {...e|rr = Giv|
|00004c00| 65 54 69 6d 65 28 66 61 | 6c 73 65 29 3b 0d 09 09 |eTime(fa|lse);...|
|00004c10| 69 66 20 28 65 72 72 20 | 21 3d 20 6e 6f 45 72 72 |if (err |!= noErr|
|00004c20| 29 20 72 65 74 75 72 6e | 20 65 72 72 3b 0d 09 09 |) return| err;...|
|00004c30| 63 6f 75 6e 74 65 72 20 | 3d 20 30 3b 0d 09 7d 0d |counter |= 0;..}.|
|00004c40| 09 0d 09 2a 72 65 73 75 | 6c 74 20 3d 20 28 2a 2a |...*resu|lt = (**|
|00004c50| 70 29 2e 6e 75 6d 62 65 | 72 20 3c 20 28 2a 2a 71 |p).numbe|r < (**q|
|00004c60| 29 2e 6e 75 6d 62 65 72 | 20 3f 20 2d 31 20 3a 20 |).number| ? -1 : |
|00004c70| 2b 31 3b 0d 09 72 65 74 | 75 72 6e 20 6e 6f 45 72 |+1;..ret|urn noEr|
|00004c80| 72 3b 0d 7d 0d 0d 0d 0d | 2f 2a 2d 2d 2d 2d 2d 2d |r;.}....|/*------|
|00004c90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004ca0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004cb0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004cc0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004cd0| 2d 2d 2d 2d 2d 2d 0d 09 | 42 75 69 6c 64 53 6f 72 |------..|BuildSor|
|00004ce0| 74 42 79 4e 75 6d 62 65 | 72 41 72 72 61 79 20 0d |tByNumbe|rArray .|
|00004cf0| 09 0d 09 42 75 69 6c 64 | 20 74 68 65 20 53 6f 72 |...Build| the Sor|
|00004d00| 74 42 79 4e 75 6d 62 65 | 72 20 61 72 72 61 79 20 |tByNumbe|r array |
|00004d10| 66 6f 72 20 74 68 65 20 | 73 75 62 6a 65 63 74 20 |for the |subject |
|00004d20| 77 69 6e 64 6f 77 2e 0d | 09 0d 09 45 6e 74 72 79 |window..|...Entry|
|00004d30| 3a 09 77 69 6e 64 20 3d | 20 70 6f 69 6e 74 65 72 |:.wind =| pointer|
|00004d40| 20 74 6f 20 77 69 6e 64 | 6f 77 20 72 65 63 6f 72 | to wind|ow recor|
|00004d50| 64 2e 0d 09 09 09 0d 09 | 45 78 69 74 3a 09 66 75 |d.......|Exit:.fu|
|00004d60| 6e 63 74 69 6f 6e 20 72 | 65 73 75 6c 74 20 3d 20 |nction r|esult = |
|00004d70| 65 72 72 6f 72 20 63 6f | 64 65 2e 0d 09 09 09 28 |error co|de.....(|
|00004d80| 2a 2a 69 6e 66 6f 29 2e | 73 6f 72 74 42 79 4e 75 |**info).|sortByNu|
|00004d90| 6d 62 65 72 20 3d 20 68 | 61 6e 64 6c 65 20 74 6f |mber = h|andle to|
|00004da0| 20 61 72 72 61 79 20 6f | 66 20 6f 66 66 73 65 74 | array o|f offset|
|00004db0| 73 20 74 6f 20 65 6c 65 | 6d 65 6e 74 73 20 6f 66 |s to ele|ments of|
|00004dc0| 0d 09 09 09 09 73 75 62 | 6a 65 63 74 20 61 72 72 |.....sub|ject arr|
|00004dd0| 61 79 20 77 68 69 63 68 | 20 61 72 65 20 69 6e 20 |ay which| are in |
|00004de0| 74 68 65 20 6c 69 73 74 | 2c 20 73 6f 72 74 65 64 |the list|, sorted|
|00004df0| 20 62 79 20 61 72 74 69 | 63 6c 65 0d 09 09 09 09 | by arti|cle.....|
|00004e00| 6e 75 6d 62 65 72 2e 20 | 0d 2d 2d 2d 2d 2d 2d 2d |number. |.-------|
|00004e10| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004e20| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004e30| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004e40| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00004e50| 2d 2d 2d 2d 2d 2a 2f 0d | 0d 73 74 61 74 69 63 20 |-----*/.|.static |
|00004e60| 4f 53 45 72 72 20 42 75 | 69 6c 64 53 6f 72 74 42 |OSErr Bu|ildSortB|
|00004e70| 79 4e 75 6d 62 65 72 41 | 72 72 61 79 20 28 57 69 |yNumberA|rray (Wi|
|00004e80| 6e 64 6f 77 50 74 72 20 | 77 69 6e 64 29 0d 7b 0d |ndowPtr |wind).{.|
|00004e90| 09 54 57 69 6e 64 6f 77 | 20 2a 2a 69 6e 66 6f 3b |.TWindow| **info;|
|00004ea0| 0d 09 54 53 75 62 6a 65 | 63 74 20 2a 2a 73 75 62 |..TSubje|ct **sub|
|00004eb0| 6a 65 63 74 41 72 72 61 | 79 3b 0d 09 73 68 6f 72 |jectArra|y;..shor|
|00004ec0| 74 20 6e 75 6d 53 75 62 | 6a 65 63 74 73 2c 20 6e |t numSub|jects, n|
|00004ed0| 75 6d 53 75 62 6a 65 63 | 74 73 49 6e 4c 69 73 74 |umSubjec|tsInList|
|00004ee0| 3b 0d 09 6c 6f 6e 67 20 | 2a 2a 73 6f 72 74 42 79 |;..long |**sortBy|
|00004ef0| 4e 75 6d 62 65 72 20 3d | 20 6e 69 6c 3b 0d 09 4f |Number =| nil;..O|
|00004f00| 53 45 72 72 20 65 72 72 | 20 3d 20 6e 6f 45 72 72 |SErr err| = noErr|
|00004f10| 3b 0d 09 73 68 6f 72 74 | 20 69 3b 0d 09 54 53 75 |;..short| i;..TSu|
|00004f20| 62 6a 65 63 74 20 2a 70 | 3b 0d 09 6c 6f 6e 67 20 |bject *p|;..long |
|00004f30| 2a 71 3b 0d 09 63 68 61 | 72 20 73 74 61 74 65 3b |*q;..cha|r state;|
|00004f40| 0d 09 0d 09 69 6e 66 6f | 20 3d 20 28 54 57 69 6e |....info| = (TWin|
|00004f50| 64 6f 77 2a 2a 29 47 65 | 74 57 52 65 66 43 6f 6e |dow**)Ge|tWRefCon|
|00004f60| 28 77 69 6e 64 29 3b 0d | 09 73 75 62 6a 65 63 74 |(wind);.|.subject|
|00004f70| 41 72 72 61 79 20 3d 20 | 28 2a 2a 69 6e 66 6f 29 |Array = |(**info)|
|00004f80| 2e 73 75 62 6a 65 63 74 | 41 72 72 61 79 3b 0d 09 |.subject|Array;..|
|00004f90| 73 74 61 74 65 20 3d 20 | 4d 79 48 47 65 74 53 74 |state = |MyHGetSt|
|00004fa0| 61 74 65 28 73 75 62 6a | 65 63 74 41 72 72 61 79 |ate(subj|ectArray|
|00004fb0| 29 3b 0d 09 6e 75 6d 53 | 75 62 6a 65 63 74 73 20 |);..numS|ubjects |
|00004fc0| 3d 20 28 2a 2a 69 6e 66 | 6f 29 2e 6e 75 6d 53 75 |= (**inf|o).numSu|
|00004fd0| 62 6a 65 63 74 73 3b 0d | 09 6e 75 6d 53 75 62 6a |bjects;.|.numSubj|
|00004fe0| 65 63 74 73 49 6e 4c 69 | 73 74 20 3d 20 28 2a 2a |ectsInLi|st = (**|
|00004ff0| 69 6e 66 6f 29 2e 6e 75 | 6d 53 75 62 6a 65 63 74 |info).nu|mSubject|
|00005000| 73 49 6e 4c 69 73 74 3b | 0d 09 0d 09 2f 2a 20 41 |sInList;|..../* A|
|00005010| 6c 6c 6f 63 61 74 65 20 | 74 68 65 20 61 72 72 61 |llocate |the arra|
|00005020| 79 2e 20 2a 2f 0d 09 0d | 09 65 72 72 20 3d 20 4d |y. */...|.err = M|
|00005030| 79 4e 65 77 48 61 6e 64 | 6c 65 28 6e 75 6d 53 75 |yNewHand|le(numSu|
|00005040| 62 6a 65 63 74 73 49 6e | 4c 69 73 74 2a 73 69 7a |bjectsIn|List*siz|
|00005050| 65 6f 66 28 6c 6f 6e 67 | 29 2c 20 26 73 6f 72 74 |eof(long|), &sort|
|00005060| 42 79 4e 75 6d 62 65 72 | 29 3b 0d 09 69 66 20 28 |ByNumber|);..if (|
|00005070| 65 72 72 20 21 3d 20 6e | 6f 45 72 72 29 20 67 6f |err != n|oErr) go|
|00005080| 74 6f 20 65 78 69 74 3b | 0d 09 0d 09 2f 2a 20 49 |to exit;|..../* I|
|00005090| 6e 69 74 69 61 6c 69 7a | 65 20 74 68 65 20 61 72 |nitializ|e the ar|
|000050a0| 72 61 79 2e 20 44 75 72 | 69 6e 67 20 74 68 65 20 |ray. Dur|ing the |
|000050b0| 73 6f 72 74 2c 20 74 68 | 65 20 61 72 72 61 79 20 |sort, th|e array |
|000050c0| 65 6c 65 6d 65 6e 74 73 | 20 61 72 65 20 70 6f 69 |elements| are poi|
|000050d0| 6e 74 65 72 73 0d 09 20 | 20 20 69 6e 74 6f 20 74 |nters.. | into t|
|000050e0| 68 65 20 6c 6f 63 6b 65 | 64 20 73 75 62 6a 65 63 |he locke|d subjec|
|000050f0| 74 20 61 72 72 61 79 2c | 20 72 61 74 68 65 72 20 |t array,| rather |
|00005100| 74 68 61 6e 20 6f 66 66 | 73 65 74 73 2e 20 2a 2f |than off|sets. */|
|00005110| 0d 09 0d 09 4d 79 48 4c | 6f 63 6b 28 73 6f 72 74 |....MyHL|ock(sort|
|00005120| 42 79 4e 75 6d 62 65 72 | 29 3b 0d 09 4d 79 48 4c |ByNumber|);..MyHL|
|00005130| 6f 63 6b 28 73 75 62 6a | 65 63 74 41 72 72 61 79 |ock(subj|ectArray|
|00005140| 29 3b 0d 0d 09 66 6f 72 | 20 28 69 20 3d 20 30 2c |);...for| (i = 0,|
|00005150| 20 70 20 3d 20 2a 73 75 | 62 6a 65 63 74 41 72 72 | p = *su|bjectArr|
|00005160| 61 79 2c 20 71 20 3d 20 | 2a 73 6f 72 74 42 79 4e |ay, q = |*sortByN|
|00005170| 75 6d 62 65 72 3b 0d 09 | 09 69 20 3c 20 6e 75 6d |umber;..|.i < num|
|00005180| 53 75 62 6a 65 63 74 73 | 3b 0d 09 09 69 2b 2b 2c |Subjects|;...i++,|
|00005190| 20 70 2b 2b 29 0d 09 7b | 0d 09 09 69 66 20 28 70 | p++)..{|...if (p|
|000051a0| 2d 3e 69 6e 4c 69 73 74 | 29 20 2a 71 2b 2b 20 3d |->inList|) *q++ =|
|000051b0| 20 28 6c 6f 6e 67 29 70 | 3b 0d 09 7d 0d 09 0d 09 | (long)p|;..}....|
|000051c0| 2f 2a 20 53 6f 72 74 20 | 74 68 65 20 61 72 72 61 |/* Sort |the arra|
|000051d0| 79 20 69 6e 74 6f 20 69 | 6e 63 72 65 61 73 69 6e |y into i|ncreasin|
|000051e0| 67 20 6f 72 64 65 72 20 | 62 79 20 61 72 74 69 63 |g order |by artic|
|000051f0| 6c 65 20 6e 75 6d 62 65 | 72 2e 20 2a 2f 0d 0d 09 |le numbe|r. */...|
|00005200| 65 72 72 20 3d 20 46 61 | 73 74 51 53 6f 72 74 28 |err = Fa|stQSort(|
|00005210| 2a 73 6f 72 74 42 79 4e | 75 6d 62 65 72 2c 20 6e |*sortByN|umber, n|
|00005220| 75 6d 53 75 62 6a 65 63 | 74 73 49 6e 4c 69 73 74 |umSubjec|tsInList|
|00005230| 2c 20 73 69 7a 65 6f 66 | 28 6c 6f 6e 67 29 2c 0d |, sizeof|(long),.|
|00005240| 09 09 28 53 6f 72 74 43 | 6d 70 46 75 6e 63 74 69 |..(SortC|mpFuncti|
|00005250| 6f 6e 29 53 6f 72 74 53 | 75 62 6a 65 63 74 41 72 |on)SortS|ubjectAr|
|00005260| 72 61 79 43 6f 6d 70 61 | 72 65 33 29 3b 0d 09 69 |rayCompa|re3);..i|
|00005270| 66 20 28 65 72 72 20 21 | 3d 20 6e 6f 45 72 72 29 |f (err !|= noErr)|
|00005280| 20 67 6f 74 6f 20 65 78 | 69 74 3b 0d 09 0d 09 2f | goto ex|it;..../|
|00005290| 2a 20 43 6f 6e 76 65 72 | 74 20 74 68 65 20 61 72 |* Conver|t the ar|
|000052a0| 72 61 79 20 66 72 6f 6d | 20 70 6f 69 6e 74 65 72 |ray from| pointer|
|000052b0| 73 20 74 6f 20 6f 66 66 | 73 65 74 73 2e 20 2a 2f |s to off|sets. */|
|000052c0| 0d 09 0d 09 66 6f 72 20 | 28 69 20 3d 20 30 2c 20 |....for |(i = 0, |
|000052d0| 71 20 3d 20 2a 73 6f 72 | 74 42 79 4e 75 6d 62 65 |q = *sor|tByNumbe|
|000052e0| 72 3b 20 69 20 3c 20 6e | 75 6d 53 75 62 6a 65 63 |r; i < n|umSubjec|
|000052f0| 74 73 49 6e 4c 69 73 74 | 3b 20 69 2b 2b 2c 20 71 |tsInList|; i++, q|
|00005300| 2b 2b 29 0d 09 09 2a 71 | 20 3d 20 28 63 68 61 72 |++)...*q| = (char|
|00005310| 2a 29 2a 71 20 2d 20 28 | 63 68 61 72 2a 29 2a 73 |*)*q - (|char*)*s|
|00005320| 75 62 6a 65 63 74 41 72 | 72 61 79 3b 0d 09 0d 09 |ubjectAr|ray;....|
|00005330| 4d 79 48 55 6e 6c 6f 63 | 6b 28 73 6f 72 74 42 79 |MyHUnloc|k(sortBy|
|00005340| 4e 75 6d 62 65 72 29 3b | 0d 09 4d 79 48 53 65 74 |Number);|..MyHSet|
|00005350| 53 74 61 74 65 28 73 75 | 62 6a 65 63 74 41 72 72 |State(su|bjectArr|
|00005360| 61 79 2c 20 73 74 61 74 | 65 29 3b 0d 09 09 0d 09 |ay, stat|e);.....|
|00005370| 28 2a 2a 69 6e 66 6f 29 | 2e 73 6f 72 74 42 79 4e |(**info)|.sortByN|
|00005380| 75 6d 62 65 72 20 3d 20 | 73 6f 72 74 42 79 4e 75 |umber = |sortByNu|
|00005390| 6d 62 65 72 3b 0d 09 72 | 65 74 75 72 6e 20 6e 6f |mber;..r|eturn no|
|000053a0| 45 72 72 3b 0d 09 0d 65 | 78 69 74 3a 0d 0d 09 4d |Err;...e|xit:...M|
|000053b0| 79 44 69 73 70 6f 73 65 | 48 61 6e 64 6c 65 28 73 |yDispose|Handle(s|
|000053c0| 6f 72 74 42 79 4e 75 6d | 62 65 72 29 3b 0d 09 4d |ortByNum|ber);..M|
|000053d0| 79 48 53 65 74 53 74 61 | 74 65 28 73 75 62 6a 65 |yHSetSta|te(subje|
|000053e0| 63 74 41 72 72 61 79 2c | 20 73 74 61 74 65 29 3b |ctArray,| state);|
|000053f0| 0d 09 72 65 74 75 72 6e | 20 65 72 72 3b 0d 7d 0d |..return| err;.}.|
|00005400| 0d 0d 0d 2f 2a 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |.../*---|--------|
|00005410| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005420| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005430| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005440| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005450| 2d 0d 09 42 75 69 6c 64 | 54 68 72 65 61 64 73 20 |-..Build|Threads |
|00005460| 0d 09 0d 09 42 75 69 6c | 64 20 73 75 62 6a 65 63 |....Buil|d subjec|
|00005470| 74 20 77 69 6e 64 6f 77 | 20 74 68 72 65 61 64 73 |t window| threads|
|00005480| 2e 0d 09 0d 09 45 6e 74 | 72 79 3a 09 77 69 6e 64 |.....Ent|ry:.wind|
|00005490| 20 3d 20 70 6f 69 6e 74 | 65 72 20 74 6f 20 73 75 | = point|er to su|
|000054a0| 62 6a 65 63 74 20 77 69 | 6e 64 6f 77 2e 0d 09 0d |bject wi|ndow....|
|000054b0| 09 45 78 69 74 3a 09 66 | 75 6e 63 74 69 6f 6e 20 |.Exit:.f|unction |
|000054c0| 72 65 73 75 6c 74 20 3d | 20 65 72 72 6f 72 20 63 |result =| error c|
|000054d0| 6f 64 65 2e 0d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |ode..---|--------|
|000054e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000054f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005500| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005510| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00005520| 2d 2a 2f 0d 0d 4f 53 45 | 72 72 20 42 75 69 6c 64 |-*/..OSE|rr Build|
|00005530| 54 68 72 65 61 64 73 20 | 28 57 69 6e 64 6f 77 50 |Threads |(WindowP|
|00005540| 74 72 20 77 69 6e 64 29 | 0d 7b 0d 09 54 57 69 6e |tr wind)|.{..TWin|
|00005550| 64 6f 77 20 2a 2a 69 6e | 66 6f 2c 20 2a 2a 70 61 |dow **in|fo, **pa|
|00005560| 72 65 6e 74 49 6e 66 6f | 3b 0d 09 57 69 6e 64 6f |rentInfo|;..Windo|
|00005570| 77 50 74 72 20 70 61 72 | 65 6e 74 3b 0d 09 54 53 |wPtr par|ent;..TS|
|00005580| 75 62 6a 65 63 74 20 2a | 2a 73 75 62 6a 65 63 74 |ubject *|*subject|
|00005590| 41 72 72 61 79 3b 0d 09 | 73 68 6f 72 74 20 6e 75 |Array;..|short nu|
|000055a0| 6d 53 75 62 6a 65 63 74 | 73 2c 20 6e 75 6d 53 75 |mSubject|s, numSu|
|000055b0| 62 6a 65 63 74 73 49 6e | 4c 69 73 74 3b 0d 09 4c |bjectsIn|List;..L|
|000055c0| 69 73 74 48 61 6e 64 6c | 65 20 74 68 65 4c 69 73 |istHandl|e theLis|
|000055d0| 74 3b 0d 09 54 53 6f 72 | 74 49 6e 66 6f 48 61 6e |t;..TSor|tInfoHan|
|000055e0| 64 6c 65 20 73 6f 72 74 | 49 6e 66 6f 20 3d 20 6e |dle sort|Info = n|
|000055f0| 69 6c 3b 0d 09 54 53 6f | 72 74 49 6e 66 6f 50 74 |il;..TSo|rtInfoPt|
|00005600| 72 20 2a 2a 73 6f 72 74 | 49 6e 66 6f 50 74 72 73 |r **sort|InfoPtrs|
|00005610| 20 3d 20 6e 69 6c 3b 0d | 09 48 61 6e 64 6c 65 20 | = nil;.|.Handle |
|00005620| 63 61 6e 6f 6e 69 63 61 | 6c 53 74 72 69 6e 67 73 |canonica|lStrings|
|00005630| 20 3d 20 6e 69 6c 3b 0d | 09 54 53 75 62 6a 65 63 | = nil;.|.TSubjec|
|00005640| 74 20 2a 71 3b 0d 09 54 | 53 6f 72 74 49 6e 66 6f |t *q;..T|SortInfo|
|00005650| 50 74 72 20 2a 72 3b 0d | 09 73 68 6f 72 74 20 2a |Ptr *r;.|.short *|
|00005660| 70 43 65 6c 6c 73 3b 0d | 09 73 68 6f 72 74 20 2a |pCells;.|.short *|
|00005670| 70 43 65 6c 6c 41 72 72 | 61 79 3b 0d 09 73 68 6f |pCellArr|ay;..sho|
|00005680| 72 74 20 6f 66 66 73 65 | 74 3b 0d 09 73 68 6f 72 |rt offse|t;..shor|
|00005690| 74 20 6e 75 6d 43 65 6c | 6c 73 3b 0d 09 73 68 6f |t numCel|ls;..sho|
|000056a0| 72 74 20 69 3b 0d 09 4f | 53 45 72 72 20 65 72 72 |rt i;..O|SErr err|
|000056b0| 20 3d 20 6e 6f 45 72 72 | 3b 0d 09 63 68 61 72 20 | = noErr|;..char |
|000056c0| 73 74 61 74 65 3b 0d 09 | 0d 09 2f 2a 20 49 6e 69 |state;..|../* Ini|
|000056d0| 74 69 61 6c 69 7a 65 2e | 20 2a 2f 0d 09 0d 09 69 |tialize.| */....i|
|000056e0| 6e 66 6f 20 3d 20 28 54 | 57 69 6e 64 6f 77 2a 2a |nfo = (T|Window**|
|000056f0| 29 47 65 74 57 52 65 66 | 43 6f 6e 28 77 69 6e 64 |)GetWRef|Con(wind|
|00005700| 29 3b 0d 09 73 75 62 6a | 65 63 74 41 72 72 61 79 |);..subj|ectArray|
|00005710| 20 3d 20 28 2a 2a 69 6e | 66 6f 29 2e 73 75 62 6a | = (**in|fo).subj|
|00005720| 65 63 74 41 72 72 61 79 | 3b 0d 09 73 74 61 74 65 |ectArray|;..state|
|00005730| 20 3d 20 4d 79 48 47 65 | 74 53 74 61 74 65 28 73 | = MyHGe|tState(s|
|00005740| 75 62 6a 65 63 74 41 72 | 72 61 79 29 3b 0d 09 67 |ubjectAr|ray);..g|
|00005750| 53 74 72 69 6e 67 73 20 | 3d 20 28 2a 2a 69 6e 66 |Strings |= (**inf|
|00005760| 6f 29 2e 73 74 72 69 6e | 67 73 3b 0d 09 74 68 65 |o).strin|gs;..the|
|00005770| 4c 69 73 74 20 3d 20 28 | 2a 2a 69 6e 66 6f 29 2e |List = (|**info).|
|00005780| 74 68 65 4c 69 73 74 3b | 0d 09 73 74 72 63 70 79 |theList;|..strcpy|
|00005790| 28 67 47 72 6f 75 70 4e | 61 6d 65 2c 20 2a 67 47 |(gGroupN|ame, *gG|
|000057a0| 72 6f 75 70 4e 61 6d 65 | 73 20 2b 20 28 2a 2a 69 |roupName|s + (**i|
|000057b0| 6e 66 6f 29 2e 67 72 6f | 75 70 4e 61 6d 65 4f 66 |nfo).gro|upNameOf|
|000057c0| 66 73 65 74 29 3b 0d 09 | 70 61 72 65 6e 74 20 3d |fset);..|parent =|
|000057d0| 20 28 2a 2a 69 6e 66 6f | 29 2e 70 61 72 65 6e 74 | (**info|).parent|
|000057e0| 57 69 6e 64 6f 77 3b 0d | 09 69 66 20 28 70 61 72 |Window;.|.if (par|
|000057f0| 65 6e 74 20 3d 3d 20 6e | 69 6c 29 20 7b 0d 09 09 |ent == n|il) {...|
|00005800| 67 50 61 72 65 6e 74 49 | 73 55 73 65 72 47 72 6f |gParentI|sUserGro|
|00005810| 75 70 4c 69 73 74 20 3d | 20 66 61 6c 73 65 3b 0d |upList =| false;.|
|00005820| 09 7d 20 65 6c 73 65 20 | 7b 0d 09 09 70 61 72 65 |.} else |{...pare|
|00005830| 6e 74 49 6e 66 6f 20 3d | 20 28 54 57 69 6e 64 6f |ntInfo =| (TWindo|
|00005840| 77 2a 2a 29 47 65 74 57 | 52 65 66 43 6f 6e 28 70 |w**)GetW|RefCon(p|
|00005850| 61 72 65 6e 74 29 3b 0d | 09 09 67 50 61 72 65 6e |arent);.|..gParen|
|00005860| 74 49 73 55 73 65 72 47 | 72 6f 75 70 4c 69 73 74 |tIsUserG|roupList|
|00005870| 20 3d 20 28 2a 2a 70 61 | 72 65 6e 74 49 6e 66 6f | = (**pa|rentInfo|
|00005880| 29 2e 67 72 6f 75 70 4b | 69 6e 64 20 3d 3d 20 6b |).groupK|ind == k|
|00005890| 55 73 65 72 47 72 6f 75 | 70 3b 0d 09 7d 0d 09 0d |UserGrou|p;..}...|
|000058a0| 09 2f 2a 20 41 70 70 65 | 6e 64 20 63 61 63 68 65 |./* Appe|nd cache|
|000058b0| 64 20 61 72 74 69 63 6c | 65 73 20 74 6f 20 73 75 |d articl|es to su|
|000058c0| 62 6a 65 63 74 20 61 72 | 72 61 79 2e 20 2a 2f 0d |bject ar|ray. */.|
|000058d0| 09 0d 09 69 66 20 28 67 | 50 61 72 65 6e 74 49 73 |...if (g|ParentIs|
|000058e0| 55 73 65 72 47 72 6f 75 | 70 4c 69 73 74 29 20 7b |UserGrou|pList) {|
|000058f0| 0d 09 09 65 72 72 20 3d | 20 41 70 70 65 6e 64 43 |...err =| AppendC|
|00005900| 61 63 68 65 64 41 72 74 | 69 63 6c 65 73 28 77 69 |achedArt|icles(wi|
|00005910| 6e 64 29 3b 0d 09 09 69 | 66 20 28 65 72 72 20 21 |nd);...i|f (err !|
|00005920| 3d 20 6e 6f 45 72 72 29 | 20 67 6f 74 6f 20 65 78 |= noErr)| goto ex|
|00005930| 69 74 3b 0d 09 7d 0d 09 | 6e 75 6d 53 75 62 6a 65 |it;..}..|numSubje|
|00005940| 63 74 73 20 3d 20 28 2a | 2a 69 6e 66 6f 29 2e 6e |cts = (*|*info).n|
|00005950| 75 6d 53 75 62 6a 65 63 | 74 73 3b 0d 0d 09 2f 2a |umSubjec|ts;.../*|
|00005960| 20 49 6e 69 74 69 61 6c | 69 7a 65 20 74 68 65 20 | Initial|ize the |
|00005970| 73 6f 72 74 20 69 6e 66 | 6f 20 64 61 74 61 20 73 |sort inf|o data s|
|00005980| 74 72 75 63 74 75 72 65 | 73 2e 20 2a 2f 0d 0d 09 |tructure|s. */...|
|00005990| 65 72 72 20 3d 20 49 6e | 69 74 53 6f 72 74 49 6e |err = In|itSortIn|
|000059a0| 66 6f 28 73 75 62 6a 65 | 63 74 41 72 72 61 79 2c |fo(subje|ctArray,|
|000059b0| 20 6e 75 6d 53 75 62 6a | 65 63 74 73 2c 20 67 53 | numSubj|ects, gS|
|000059c0| 74 72 69 6e 67 73 2c 0d | 09 09 26 73 6f 72 74 49 |trings,.|..&sortI|
|000059d0| 6e 66 6f 2c 20 26 63 61 | 6e 6f 6e 69 63 61 6c 53 |nfo, &ca|nonicalS|
|000059e0| 74 72 69 6e 67 73 2c 20 | 26 73 6f 72 74 49 6e 66 |trings, |&sortInf|
|000059f0| 6f 50 74 72 73 29 3b 0d | 09 69 66 20 28 65 72 72 |oPtrs);.|.if (err|
|00005a00| 20 21 3d 20 6e 6f 45 72 | 72 29 20 67 6f 74 6f 20 | != noEr|r) goto |
|00005a10| 65 78 69 74 3b 0d 0d 09 | 2f 2a 20 53 6f 72 74 20 |exit;...|/* Sort |
|00005a20| 74 68 65 20 73 6f 72 74 | 49 6e 66 6f 50 74 72 73 |the sort|InfoPtrs|
|00005a30| 20 61 72 72 61 79 20 69 | 6e 74 6f 20 74 68 72 65 | array i|nto thre|
|00005a40| 61 64 20 6f 72 64 65 72 | 2e 20 2a 2f 0d 09 0d 09 |ad order|. */....|
|00005a50| 65 72 72 20 3d 20 53 6f | 72 74 41 72 72 61 79 28 |err = So|rtArray(|
|00005a60| 2a 73 6f 72 74 49 6e 66 | 6f 50 74 72 73 2c 20 6e |*sortInf|oPtrs, n|
|00005a70| 75 6d 53 75 62 6a 65 63 | 74 73 29 3b 0d 09 69 66 |umSubjec|ts);..if|
|00005a80| 20 28 65 72 72 20 21 3d | 20 6e 6f 45 72 72 29 20 | (err !=| noErr) |
|00005a90| 67 6f 74 6f 20 65 78 69 | 74 3b 0d 09 0d 09 2f 2a |goto exi|t;..../*|
|00005aa0| 20 57 65 20 63 61 6e 20 | 61 6e 64 20 73 68 6f 75 | We can |and shou|
|00005ab0| 6c 64 20 67 65 74 20 72 | 69 64 20 6f 66 20 74 68 |ld get r|id of th|
|00005ac0| 65 20 63 61 6e 6f 6e 69 | 63 61 6c 53 74 72 69 6e |e canoni|calStrin|
|00005ad0| 67 73 20 6d 65 6d 6f 72 | 79 20 62 6c 6f 63 6b 20 |gs memor|y block |
|00005ae0| 61 74 20 74 68 69 73 20 | 70 6f 69 6e 74 2e 20 2a |at this |point. *|
|00005af0| 2f 0d 09 0d 09 4d 79 44 | 69 73 70 6f 73 65 48 61 |/....MyD|isposeHa|
|00005b00| 6e 64 6c 65 28 63 61 6e | 6f 6e 69 63 61 6c 53 74 |ndle(can|onicalSt|
|00005b10| 72 69 6e 67 73 29 3b 0d | 09 63 61 6e 6f 6e 69 63 |rings);.|.canonic|
|00005b20| 61 6c 53 74 72 69 6e 67 | 73 20 3d 20 6e 69 6c 3b |alString|s = nil;|
|00005b30| 0d 09 0d 09 2f 2a 20 53 | 70 6c 69 74 20 70 61 72 |..../* S|plit par|
|00005b40| 74 20 74 68 72 65 61 64 | 73 2e 20 2a 2f 0d 09 0d |t thread|s. */...|
|00005b50| 09 53 70 6c 69 74 50 61 | 72 74 54 68 72 65 61 64 |.SplitPa|rtThread|
|00005b60| 73 28 2a 73 75 62 6a 65 | 63 74 41 72 72 61 79 2c |s(*subje|ctArray,|
|00005b70| 20 6e 75 6d 53 75 62 6a | 65 63 74 73 29 3b 0d 09 | numSubj|ects);..|
|00005b80| 0d 09 2f 2a 20 43 6f 6d | 70 75 74 65 20 74 68 65 |../* Com|pute the|
|00005b90| 20 6e 75 6d 62 65 72 20 | 6f 66 20 73 75 62 6a 65 | number |of subje|
|00005ba0| 63 74 73 20 69 6e 20 74 | 68 65 20 6c 69 73 74 20 |cts in t|he list |
|00005bb0| 61 6e 64 20 74 68 65 20 | 6e 75 6d 62 65 72 0d 09 |and the |number..|
|00005bc0| 20 20 20 6f 66 20 63 65 | 6c 6c 73 20 69 6e 20 74 | of ce|lls in t|
|00005bd0| 68 65 20 6c 69 73 74 2e | 20 2a 2f 0d 09 0d 09 6e |he list.| */....n|
|00005be0| 75 6d 53 75 62 6a 65 63 | 74 73 49 6e 4c 69 73 74 |umSubjec|tsInList|
|00005bf0| 20 3d 20 6e 75 6d 53 75 | 62 6a 65 63 74 73 3b 0d | = numSu|bjects;.|
|00005c00| 09 6e 75 6d 43 65 6c 6c | 73 20 3d 20 6e 75 6d 53 |.numCell|s = numS|
|00005c10| 75 62 6a 65 63 74 73 3b | 0d 09 66 6f 72 20 28 69 |ubjects;|..for (i|
|00005c20| 20 3d 20 30 2c 20 71 20 | 3d 20 2a 73 75 62 6a 65 | = 0, q |= *subje|
|00005c30| 63 74 41 72 72 61 79 3b | 20 69 20 3c 20 6e 75 6d |ctArray;| i < num|
|00005c40| 53 75 62 6a 65 63 74 73 | 3b 20 69 2b 2b 2c 20 71 |Subjects|; i++, q|
|00005c50| 2b 2b 29 20 7b 0d 09 09 | 69 66 20 28 21 71 2d 3e |++) {...|if (!q->|
|00005c60| 69 6e 4c 69 73 74 29 20 | 7b 0d 09 09 09 6e 75 6d |inList) |{....num|
|00005c70| 53 75 62 6a 65 63 74 73 | 49 6e 4c 69 73 74 2d 2d |Subjects|InList--|
|00005c80| 3b 0d 09 09 09 6e 75 6d | 43 65 6c 6c 73 2d 2d 3b |;....num|Cells--;|
|00005c90| 0d 09 09 7d 20 65 6c 73 | 65 20 69 66 20 28 71 2d |...} els|e if (q-|
|00005ca0| 3e 63 6f 6c 6c 61 70 73 | 65 64 20 26 26 20 71 2d |>collaps|ed && q-|
|00005cb0| 3e 74 68 72 65 61 64 4f | 72 64 69 6e 61 6c 20 21 |>threadO|rdinal !|
|00005cc0| 3d 20 31 29 20 7b 0d 09 | 09 09 6e 75 6d 43 65 6c |= 1) {..|..numCel|
|00005cd0| 6c 73 2d 2d 3b 0d 09 09 | 7d 0d 09 7d 0d 09 28 2a |ls--;...|}..}..(*|
|00005ce0| 2a 69 6e 66 6f 29 2e 6e | 75 6d 53 75 62 6a 65 63 |*info).n|umSubjec|
|00005cf0| 74 73 49 6e 4c 69 73 74 | 20 3d 20 6e 75 6d 53 75 |tsInList| = numSu|
|00005d00| 62 6a 65 63 74 73 49 6e | 4c 69 73 74 3b 0d 0d 09 |bjectsIn|List;...|
|00005d10| 2f 2a 20 43 72 65 61 74 | 65 20 74 68 65 20 4c 69 |/* Creat|e the Li|
|00005d20| 73 74 20 4d 61 6e 61 67 | 65 72 20 63 65 6c 6c 20 |st Manag|er cell |
|00005d30| 6c 69 73 74 2e 20 2a 2f | 0d 09 0d 09 4c 53 65 74 |list. */|....LSet|
|00005d40| 44 72 61 77 69 6e 67 4d | 6f 64 65 28 66 61 6c 73 |DrawingM|ode(fals|
|00005d50| 65 2c 20 74 68 65 4c 69 | 73 74 29 3b 0d 09 4c 41 |e, theLi|st);..LA|
|00005d60| 64 64 52 6f 77 28 6e 75 | 6d 43 65 6c 6c 73 2c 20 |ddRow(nu|mCells, |
|00005d70| 30 2c 20 74 68 65 4c 69 | 73 74 29 3b 0d 09 65 72 |0, theLi|st);..er|
|00005d80| 72 20 3d 20 4d 79 53 65 | 74 48 61 6e 64 6c 65 53 |r = MySe|tHandleS|
|00005d90| 69 7a 65 28 28 2a 2a 74 | 68 65 4c 69 73 74 29 2e |ize((**t|heList).|
|00005da0| 63 65 6c 6c 73 2c 20 32 | 2a 6e 75 6d 43 65 6c 6c |cells, 2|*numCell|
|00005db0| 73 29 3b 0d 09 69 66 20 | 28 65 72 72 20 21 3d 20 |s);..if |(err != |
|00005dc0| 6e 6f 45 72 72 29 20 67 | 6f 74 6f 20 65 78 69 74 |noErr) g|oto exit|
|00005dd0| 3b 0d 09 70 43 65 6c 6c | 73 20 3d 20 28 73 68 6f |;..pCell|s = (sho|
|00005de0| 72 74 2a 29 2a 28 28 2a | 2a 74 68 65 4c 69 73 74 |rt*)*((*|*theList|
|00005df0| 29 2e 63 65 6c 6c 73 29 | 3b 0d 09 70 43 65 6c 6c |).cells)|;..pCell|
|00005e00| 41 72 72 61 79 20 3d 20 | 28 2a 2a 74 68 65 4c 69 |Array = |(**theLi|
|00005e10| 73 74 29 2e 63 65 6c 6c | 41 72 72 61 79 3b 0d 09 |st).cell|Array;..|
|00005e20| 6f 66 66 73 65 74 20 3d | 20 30 3b 0d 09 66 6f 72 |offset =| 0;..for|
|00005e30| 20 28 69 20 3d 20 30 2c | 20 72 20 3d 20 2a 73 6f | (i = 0,| r = *so|
|00005e40| 72 74 49 6e 66 6f 50 74 | 72 73 3b 20 69 20 3c 20 |rtInfoPt|rs; i < |
|00005e50| 6e 75 6d 53 75 62 6a 65 | 63 74 73 3b 20 69 2b 2b |numSubje|cts; i++|
|00005e60| 2c 20 72 2b 2b 29 20 7b | 0d 09 09 71 20 3d 20 28 |, r++) {|...q = (|
|00005e70| 2a 2a 72 29 2e 73 75 62 | 6a 65 63 74 3b 0d 09 09 |**r).sub|ject;...|
|00005e80| 69 66 20 28 71 2d 3e 69 | 6e 4c 69 73 74 29 20 7b |if (q->i|nList) {|
|00005e90| 0d 09 09 09 69 66 20 28 | 21 71 2d 3e 63 6f 6c 6c |....if (|!q->coll|
|00005ea0| 61 70 73 65 64 20 7c 7c | 20 71 2d 3e 74 68 72 65 |apsed ||| q->thre|
|00005eb0| 61 64 4f 72 64 69 6e 61 | 6c 20 3d 3d 20 31 29 20 |adOrdina|l == 1) |
|00005ec0| 7b 0d 09 09 09 09 2a 70 | 43 65 6c 6c 41 72 72 61 |{.....*p|CellArra|
|00005ed0| 79 2b 2b 20 3d 20 6f 66 | 66 73 65 74 3b 0d 09 09 |y++ = of|fset;...|
|00005ee0| 09 09 2a 70 43 65 6c 6c | 73 2b 2b 20 3d 20 28 2a |..*pCell|s++ = (*|
|00005ef0| 72 29 2d 3e 69 6e 64 65 | 78 3b 0d 09 09 09 09 6f |r)->inde|x;.....o|
|00005f00| 66 66 73 65 74 20 2b 3d | 20 32 3b 0d 09 09 09 7d |ffset +=| 2;....}|
|00005f10| 0d 09 09 7d 0d 09 7d 0d | 09 2a 70 43 65 6c 6c 41 |...}..}.|.*pCellA|
|00005f20| 72 72 61 79 20 3d 20 6f | 66 66 73 65 74 3b 0d 09 |rray = o|ffset;..|
|00005f30| 4c 53 65 74 44 72 61 77 | 69 6e 67 4d 6f 64 65 28 |LSetDraw|ingMode(|
|00005f40| 74 72 75 65 2c 20 74 68 | 65 4c 69 73 74 29 3b 0d |true, th|eList);.|
|00005f50| 09 0d 09 2f 2a 20 44 69 | 73 70 6f 73 65 20 74 68 |.../* Di|spose th|
|00005f60| 65 20 73 6f 72 74 49 6e | 66 6f 20 61 6e 64 20 73 |e sortIn|fo and s|
|00005f70| 6f 72 74 49 6e 66 6f 50 | 74 72 73 20 6d 65 6d 6f |ortInfoP|trs memo|
|00005f80| 72 79 20 62 6c 6f 63 6b | 73 2e 20 2a 2f 0d 09 09 |ry block|s. */...|
|00005f90| 0d 09 4d 79 48 53 65 74 | 53 74 61 74 65 28 73 75 |..MyHSet|State(su|
|00005fa0| 62 6a 65 63 74 41 72 72 | 61 79 2c 20 73 74 61 74 |bjectArr|ay, stat|
|00005fb0| 65 29 3b 0d 09 4d 79 44 | 69 73 70 6f 73 65 48 61 |e);..MyD|isposeHa|
|00005fc0| 6e 64 6c 65 28 73 6f 72 | 74 49 6e 66 6f 29 3b 0d |ndle(sor|tInfo);.|
|00005fd0| 09 4d 79 44 69 73 70 6f | 73 65 48 61 6e 64 6c 65 |.MyDispo|seHandle|
|00005fe0| 28 73 6f 72 74 49 6e 66 | 6f 50 74 72 73 29 3b 0d |(sortInf|oPtrs);.|
|00005ff0| 09 0d 09 2f 2a 20 42 75 | 69 6c 64 20 74 68 65 20 |.../* Bu|ild the |
|00006000| 73 6f 72 74 20 62 79 20 | 6e 75 6d 62 65 72 20 61 |sort by |number a|
|00006010| 72 72 61 79 2e 20 2a 2f | 0d 09 0d 09 72 65 74 75 |rray. */|....retu|
|00006020| 72 6e 20 42 75 69 6c 64 | 53 6f 72 74 42 79 4e 75 |rn Build|SortByNu|
|00006030| 6d 62 65 72 41 72 72 61 | 79 28 77 69 6e 64 29 3b |mberArra|y(wind);|
|00006040| 0d 09 0d 65 78 69 74 3a | 0d 0d 09 4d 79 48 53 65 |...exit:|...MyHSe|
|00006050| 74 53 74 61 74 65 28 73 | 75 62 6a 65 63 74 41 72 |tState(s|ubjectAr|
|00006060| 72 61 79 2c 20 73 74 61 | 74 65 29 3b 0d 09 4d 79 |ray, sta|te);..My|
|00006070| 44 69 73 70 6f 73 65 48 | 61 6e 64 6c 65 28 73 6f |DisposeH|andle(so|
|00006080| 72 74 49 6e 66 6f 29 3b | 0d 09 4d 79 44 69 73 70 |rtInfo);|..MyDisp|
|00006090| 6f 73 65 48 61 6e 64 6c | 65 28 63 61 6e 6f 6e 69 |oseHandl|e(canoni|
|000060a0| 63 61 6c 53 74 72 69 6e | 67 73 29 3b 0d 09 4d 79 |calStrin|gs);..My|
|000060b0| 44 69 73 70 6f 73 65 48 | 61 6e 64 6c 65 28 73 6f |DisposeH|andle(so|
|000060c0| 72 74 49 6e 66 6f 50 74 | 72 73 29 3b 0d 09 4c 44 |rtInfoPt|rs);..LD|
|000060d0| 65 6c 52 6f 77 28 30 2c | 20 30 2c 20 74 68 65 4c |elRow(0,| 0, theL|
|000060e0| 69 73 74 29 3b 0d 09 4c | 53 65 74 44 72 61 77 69 |ist);..L|SetDrawi|
|000060f0| 6e 67 4d 6f 64 65 28 74 | 72 75 65 2c 20 74 68 65 |ngMode(t|rue, the|
|00006100| 4c 69 73 74 29 3b 0d 09 | 72 65 74 75 72 6e 20 65 |List);..|return e|
|00006110| 72 72 3b 0d 7d 0d 00 00 | 00 00 00 00 00 00 00 00 |rr;.}...|........|
|00006120| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00006130| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00006140| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00006150| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00006160| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00006170| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00006180| 00 00 01 00 00 00 01 54 | 00 00 00 54 00 00 00 46 |.......T|...T...F|
|00006190| 00 00 6b de 06 77 69 6e | 64 2e 68 2e 02 00 00 00 |..k..win|d.h.....|
|000061a0| 54 45 58 54 4d 4d 43 43 | 01 00 ff ff ff ff 00 00 |TEXTMMCC|........|
|000061b0| 08 74 68 72 65 61 64 2e | 63 00 02 00 00 00 54 45 |.thread.|c.....TE|
|000061c0| 58 54 4d 4d 43 43 01 00 | 02 90 0a 1d 00 00 00 00 |XTMMCC..|........|
|000061d0| 00 00 54 45 58 54 4d 4d | 43 43 01 00 02 90 0a 1d |..TEXTMM|CC......|
|000061e0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|000061f0| 00 00 aa 4f 8b 9f 00 00 | 60 96 00 00 01 9a 00 00 |...O....|`.......|
|00006200| 00 00 10 00 00 00 6b de | 0a 77 69 6e 64 75 74 69 |......k.|.winduti|
|00006210| 6c 2e 63 2e 02 00 00 00 | 54 45 58 54 4d 4d 43 43 |l.c.....|TEXTMMCC|
|00006220| 01 00 ff ff ff ff 00 00 | 00 00 6e 40 00 00 00 00 |........|..n@....|
|00006230| 3a 53 00 00 40 00 00 00 | 00 00 00 00 00 00 00 00 |:S..@...|........|
|00006240| aa 4f 8b b2 aa 4f 8b b5 | 00 00 00 00 00 00 00 00 |.O...O..|........|
|00006250| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 60 52 |........|......`R|
|00006260| 00 08 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00006270| 00 00 00 00 00 00 00 00 | 00 00 10 00 00 00 6b de |........|......k.|
|00006280| 00 00 00 48 00 09 4d 6f | 6e 61 63 6f 00 00 00 00 |...H..Mo|naco....|
|00006290| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|000062a0| 00 00 00 00 00 00 00 03 | 00 04 fe d9 02 84 02 2b |........|.......+|
|000062b0| 04 af fe d9 02 84 02 2b | 04 af ab 85 f6 11 00 00 |.......+|........|
|000062c0| 10 29 00 00 10 3e 00 00 | 11 6a 01 00 00 00 00 04 |.)...>..|.j......|
|000062d0| 00 01 00 01 00 00 01 00 | 00 00 01 54 00 00 00 54 |........|...T...T|
|000062e0| 00 00 00 46 01 3e 4b 38 | 13 d6 00 00 00 1c 00 46 |...F.>K8|.......F|
|000062f0| 00 01 4d 50 53 52 00 00 | 00 12 4d 57 42 42 00 00 |..MPSR..|..MWBB..|
|00006300| 00 1e 03 ed ff ff 00 00 | 00 00 00 00 00 00 03 f0 |........|........|
|00006310| ff ff 00 00 00 4c 00 00 | 00 00 00 00 00 00 00 00 |.....L..|........|
|00006320| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00006330| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00006340| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00006350| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00006360| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00006370| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
+--------+-------------------------+-------------------------+--------+--------+